当前位置:首页 期刊杂志

针对大数据量的高校师生网络文档查找系统设计与实现

时间:2024-05-04

廖彬

(福州大学 福建省福州市 350108)

目前多数的搜索引擎已经能很好的为高校师生提供文档格式的互联网资源,但是面对互联网信息的海量、异构的特点,以及用户对信息搜索精度、广度和速度的要求下,搜索引擎暴露出诸多缺点:搜索覆盖率低,一个普通的搜索引擎只能覆盖整个互联网信息资源的5 ~20%;[1]。高校师生作为一个特殊的群体,对学术类等特定网络文档的搜索需求极高,在数据量聚增的大背景下,如何让搜索变得更便捷,搜索的内容更完备显得越来越重要。

1 相关技术概述

1.1 HTML Parser

html parser 是一个纯的java 写的html 解析的库,它不依赖于其它的java 库文件[2]。HTML Parser 主要用于改造或提取html 页面并能进行超高速解析,是目前使用最为广泛的网页分析技术。

1.2 Lucene

Lucene 是一个开放源代码的全文检索引擎工具包,它是一个全文检索引擎的架构,不仅提供了完整的索引和检索引擎,而且为数据访问和管理提供了接口[3],这使得它能够方便的嵌入到各种应用中实现针对应用的全文索引/检索功能。

2 系统框架设计

系统框架图如图1所示。本次系统主要分为获取和检索两部分:获取部分根据用户自由组合不同的搜索引擎和信息类型的条件通过爬虫技术抓取相应页面的内容;运用HTML Parser 进行网页内容分析,过滤掉网页中的垃圾信息,提取对用户有用的文档链接;最后利用多线程技术对文档进行下载,并与从师生文档库搜索出的文档合并,获取完整的文档。检索部分是一个基于Lucene 检索工具包开发的检索系统,完成了从对文档的分析、分词、索引建立到最后的检索这一系列流程,并优化了索引建立的速度,让师生能快速查找到自己想要的文档。

3 系统关键模块设计

3.1 获取部分

本次研究在网络信息抓取部分主要通过统一的输入调用各大搜索引擎进行信息搜索,通过接口调用搜索到的结果,对搜索的内容进行进一步的分析,从中提取用户有用的信息,快速下载这些信息到本地保存,为后期的索引提供大量的数据基础。

图2 通过爬虫技术构建URL,并用openConnection()方法创建Connection 从而得到与URL 相应的HTML 页面的数据流。运用HTML Parser 对HTML 页面进行分析,采用广度优先搜索的爬虫策略从中提取出链接节点,对链接进行判断并采取不同的操作,从而减少链接的下载数量,提高速率。

师生文档库主要指高校内部用于师生交流学习而建立的文档数据库,此文档数据库应包含文档的格式、名称、文档的存放路径,通过与文档数据库的对接,可以实现通过用户的关键字和格式输入从而获得文档的存放路径,并直接进行下载进本地方便后面的检索。

图1:系统框架图

图2:URL 构造活动图

同时引入多线程机制对每一个文档启动一个独立的线程负责下载。线程总数是有限制的,通过ThreadCount 参数确保同一时间下载的线程数不超过数量限制。该机制的实现过程如下:

该机制确保了同一时间只有ThreadCount 个线程在运行,只有当其中有线程执行完毕之后才会启动新的线程。

3.2 检索部分

通过上面的信息获取,我们将在本地获得包括HTML、DOC、PDF 等格式的大量文件,接下来就是要对这大量的数据文档建立索引,方便师生进行特定的内容搜索。本次检索部分主要通过Lucene来设计并实现了一个实用性强、扩展性高的检索系统。

在检索部分设计上,因为Lucene 只能对纯文本文件进行操作,系统管理员应先通过分析器对本地的文档进行纯文本抽取,然后运用分词器对传入的纯文本文件进行分词处理,提供词元序列建立索引,并把索引的结果存入索引数据库。用户通过用户查询界面输入要查询的关键字,系统把关键字提取后传入索引器,索引器根据关键字到索引数据库中进行查找相应内容,并把查找的内容文档传回给用户。

在文本分析上,首先对传入的文件类型进行判断其有效性。对有效类型文档送入相应文件类型的分析器进行文本分析,得到Lucene 可以识别的纯文本文件并送入分词器中进行分词。

在索引建立和检索上,Lucene 提供了非常简单的建立索引的方法,将要检索的文档封装成Document 对象并进行分析分词处理,再将索引对象写入索引库。最后利用org.apache.search.IndexSearcher 包提供到的一些类来实现对索引的检索。

3.3 索引优化

本次研究针对大数据还特别进行了索引优化,由于师生要监测的数据量可能非常大,所以数据的检索速度是至关重要的。除了可以在硬件上进行提升之外,还可以对系统本身进行代码优化,这所花费的成本要比硬件升级要低得多。Lucene 在内存中持有一块缓冲区,而类IndexWriter 提供了三个参数用来调整缓冲区的大小以及往磁盘上写索引文件的频率[4]。下面将对几个参数做简要描述。

合并因子(mergeFactor):决定了在Lucene 的一个索引块中可以存放多少文档以及把磁盘上的索引块合并成一个大的索引块的频率[4]。

最大合并文档因子(MaxMergeDocs):决定在合并段过程中的最大的段合数目。设置的值比较小时,对于交互性的索引比较好,比较的界限一般是10,000[5]。

最小合并文档因子(MaxBufferedDocs):决定在对内存中的文档进行合并成段的操作之前,要求的最小的文档数量。表1 反映了两个参数取不同值时对索引时间的影响。

一般最大合并文档因子采用系统默认的最大值,无需设置,通过表1 我们可以清楚地看到合并因子和最小合并文档因子对索引时间的影响。因子的取值主要是占用内存的大小,实验表明,只要有足够大的内存,就可以为合并因子和最小合并文档数这两个参数设置较大的值以提高索引速度。

4 系统界面及运行结果

从图3 我们可以看到,本次的系统可通过关键字选择性的对谷歌、百度、搜狗、搜搜、微软Bing、有道六大搜索引擎进行同步搜索,并支持大部分的文件格式下载和检索。

由表2 数据可知,本文所设计的系统可以正确地处理DOC、PPT、PDF、XLS 和HTML 等文档,对于海量的数据,检索速度还是令人满意的。

表1:不同参数值对索引时间影响表

表2:测试结果表

图3:系统功能主界面

5 结论

本次系统在测试中搜索的完备性、针对性及检索速度上得到了用户的肯定,随着计算机硬件技术的发展以及索引算法的进一步优化,相信专用信息抓取在大数据时代来临的时候将会获得更为完备的数据,拥有更为广阔的研究价值。

免责声明

我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!