好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

基于Heritrix+Lucene的搜索引擎构建

基于Heritrix+Lucene的搜索引擎构建

系统功能需求:

1.可自定义要搜索的网站列表;

2.可对目标列表网站的网页内容进行检索。

系统主要功能模块:

网络蜘蛛:采集、解析并保存目标列表网站的内容(网页)。

全文索引/检索:为目标列表网站内容建立索引,提供内容的全文检索。

采取方案:

网络蜘蛛——采用开源框架Heritrix, Heritrix是一个爬虫框架,可加如入一些可互换的组件。下载页面: http://crawler.archive.org/index.html 。如何使用Heritrix可参考相关文献,也可笔者的《 使用Heritrix爬虫爬取网页 》。这里不再进行详细阐述。

全文索引/检索——该部分基于Lucene实现的。Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。Lucene官方网站: http://lucene.apache.org/ 。

Lucene索引过程的核心类:
IndexWriter :提供对索引的写入操作
Directory:描述了索引存放的位置
Analyzer:对文本进行分析,提取词汇(token),剔除无用的信息
Document:虚拟的文档
Field:每个Document包含一个或多个不同命名的Field,每个Field对应一段数据,这些数据在搜索过程中可能会被查询或在索引中被检索。

示例代码:  

Directory dir =  FSDirectory.getDirectory(indexDir);
Analyzer anlyzer  =  new   SimpleAnalyzer();
IndexWriter writer  =  new  IndexWriter(dir, analyzer,  true  );
Document doc  =  new   Document();
doc.add(Field.Keyword(“id”, “ 1000 ”);
doc.add(Field.UnIndexed(“name”, “Yao Ming”);
doc.add(Field.UnStored(“intro”, “Yao Ming is a player of Houseton Rockets.”);
writer.addDocument(doc);
writer.close(); 

Lucene搜索过程的核心类:

IndexSearcher:用于搜索IndexWriter创建的索引
Term:用于搜索的一个基本单元包括了一对字符串元素,与Field相对应
Query :抽象的查询类
TermQuery:最基本的查询类型,用来匹配特定Field中包含特定值的文档
Hits:存放有序搜索结果指针的简单容器

示例代码:

IndexSearcher searcher =  new   IndexSearcher(directory);
Term t  =  new   Term(“intro”, “Yao”);
Query query  =  new   TermQuery(t);
Hits hits  =  searcher.search(query);
assertEquals(“JUnit test”,  1, hits.length());

在Heritrix下载获取网页资源后,需要对网页内容进行提取,提取网页内容在java世界中,可以使用HtmlParser或者Jsoup等开源软件。
HtmlParser—— htmlparser是一个纯的java写的html解析的库,它不依赖于其它的java库文件,主要用于改造或 提取html。它能超高速解析html,而且不会出错。下载地址: http://sourceforge.net/projects/htmlparser/ 。

Jsoup——jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。官方网站: http://jsoup.org/ 。

在使用Lucene建立索引时,需要进行切词,lucene自带了一些切词工具,但主要是面向英文和德文的,中文没有英文那样明显的空格隔开词汇,因此需要另外加入中文切词功能。 中文分词相关的工具有很多,比如 IKAnalyzer 、 ictclas4j、Je—Analyer等 。

整个系统主要是基于Heritrix和Lucene实现的,可以基于这两个框架上搭建和完善搜索引擎。

 

 

分类:  搜索引擎

标签:  Heritrix ,  搜索引擎 ,  Lucene

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于基于Heritrix+Lucene的搜索引擎构建的详细内容...

  阅读:38次