使用Lucene技术实现桌面批量文件搜索引擎

时间:2022-08-26 09:36:35

使用Lucene技术实现桌面批量文件搜索引擎

摘要:本文在充分实验的基础上,利用Lucene技术实现了桌面批量文件全文搜索引擎,并通过检测词库工具显示Lucene索引数据,阐述了全文搜索的工作原理。

关键词:全文搜索;Lucene;IKAnalyze

Abstract:

In this paper,on the full experimental basis, using Lucene technology, achieves the full text of the desktop batch files search engine, and by detecting the thesaurus tool shows the Lucene index data, set the full-text search works.

Keywords: Full Text Retrieval;Lucene;IKAnalyze

1 搜索引擎的概述

搜索引擎是指根据一定的策略、运用特定的计算机程序搜集互联网上的信息,在对信息进行组织和处理后,并将处理后的信息显示给用户,是为用户提供检索服务的系统。搜索引擎主要分为以下三类:

全文索引:全文索引引擎是名副其实的搜索引擎,国外代表有Google,国内则有著名的百度搜索。它们从互联网提取各个网站的信息(以网页文字为主),建立起数据库,并能检索与用户查询条件相匹配的记录,按一定的排列顺序返回结果。

目录索引:目录索引是按目录分类的网站链接列表。用户可以按照分类目录找到所需要的信息,不依靠关键词(Keywords)进行查询。目录索引中最具代表性的是大名鼎鼎的Yahoo、新浪分类目录搜索。

元搜索引擎:元搜索引擎接受用户查询请求后,同时在多个搜索引擎上搜索,并将结果返回给用户。

2 全文搜索引擎的工作原理

全文搜索引擎的工作原理如图1所示。

具体工作过程如下:

(1)抓取网页。

每个独立的搜索引擎都有自己的网页抓取程序(spider)。Spider顺着网页中的超链接,连续地抓取网页。被抓取的网页被称之为网页快照。由于互联网中超链接的应用很普遍,理论上,从一定范围的网页出发,就能搜集到绝大多数的网页,并把网页存放到本地文件系统中。

(2)处理网页。

搜索引擎抓到网页后,然后是提取关键词和文件内容,建立索引文件,还包括去除重复网页、中文分词、判断网页类型、分析超链接、计算网页的重要度/丰富度等,并将索引表保存到专用数据库中。

(3)提供检索服务。

用户输入关键词进行检索,搜索引擎从索引数据库中找到匹配该关键词的网页;为了用户便于判断,除了网页标题和URL外,还会提供一段来自网页的摘要以及其他信息。

3 Lucene和IKAnalyzer技术

Lucene是Java领域的全文搜索的工具包,它不仅可以对文本数据进行搜索,还可以对HTML、Excel和PDF等格式的文件建立索引并且进行搜索,它不但提供了基于Java索引和搜索技术,而且还提供了拼写检查、高级分析功能。它能够建立全文索引库,并对索引内容进行搜索。但它不提供爬虫程序和“PageRank”等排序算法。

IKAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包,它采用了多子处理器分析模式,支持英文字母(IP地址、Email、URL)、数字(日期,常用中文数量词,罗马数字,科学计数法),中文词汇(姓名、地名处理)等分词处理。

4 Lucene全文搜索引擎的实现机制

Lucene主要包括两个重要功能:一是对搜索内容建立索引库,对待索引的纯文本内容经切分词后的索引入库;二是检索索引库,即根据查询条件从索引库中找出符合条件的文档,搜索时用二元搜索算法快速定位关键字,找到匹配的关键字,查出相对性的文档的位置,实现检索。图2是Lucene全文索引及检索过程示意图。

(1)Lucene中与索引相关的类有如下几类。

Analyzer类:词法分析器,对文本资源进行切分。将文本按规则切分为一个个可以进行索引的最小单位(关键字)。一段有意义的文字需要通过Analyzer分割成一个个词语后才能按关键词搜索。

IndexWriter类:用于创建索引文件。

Analyzer:语言分析器,用于分析搜索引擎遇到的各种文件。

Document类:索引文件的存储结构,一个Document代表索引库中的一条记录,要搜索的信息封装成Document后通过IndexWriter写入索引库。类似于数据库表中每一条记录。

Filed类:一个Document可以包含多个列,叫做field。创建Document对象以后,可以通过Document的add方法增加这些列。类似于数据库表中的每一个字段。

(2)Lucene中与检索相关的类有如下几类。

IndexSearcher类:在索引库中检索的类。

QueryParser:查询分析器,是一个解析查询字符串的类,生成Query对象。

Query:用于搜索的类。

TopDocs:返回搜索结果集的类,由匹配的Document组成。

5 搜索引擎索引库的建立和检索

(1)本实验对e:\source文件下196个文件建立索引表,源代码如下。

public static void index() throws Exception {

//指定索引文件存放位置

File file = new File("e:\\index1");

Directory dir = FSDirectory.open(file);

//指定语言分词器,IKAnalyzer为中文分词器工具包

Analyzer an = new IKAnalyzer();

//用指定的索引文件位置,语言分词器构造新的写索引器

IndexWriter writer = new IndexWriter(dir, an, true,IndexWriter.MaxFieldLength.UNLIMITED);

//设置索引源文件路径

File path = new File("e:\\source");

String[] filenames = path.list();

for (int i = 0; i < filenames.length; i++) {

File f = new File("e:\\source\\"+filenames[i]);

/*构造包含3个字段的Document对象

* filename字段,子存储,不索引

* path字段,只存储,不索引

* content字段,进行全文索引*/

Document doc = new Document();

Field f1 = new Field("filename", f.getName(), Field.Store.YES,

Field.Index.NOT_ANALYZED);

Field f2 = new Field("path", f.getPath(), Field.Store.YES,

上一篇:基于工作研究的信息系统人机交互设计研究 下一篇:Web 2.0企业级应用趋势探讨