Lucene的总体架构简介

Lucene的总体架构简介

 

Luceneapache软件基金会jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。

Lucene的原作者是Doug Cutting,他是一位资深全文检索专家,曾经是V-Twin搜索引擎的主要开发者,后在Excite担任高级系统架构设计师,目前人事一些Internet底层架构的研究。一开始,Doug Cutting是将Lucene发表在自己的个人主页上。20003月将其转移到了SourceForge上,并于200110月捐献给了Apache软件聪明,使Lucene成为Jakarta的一个子工程。Lucene的取名来自于Doug Cutting的妻子的名字。

总的来说,Lucene有以下几个特点:

1.高效、可扩展、开源的全文检索引擎工具包

2.Java实现,无须配置

3.仅支持纯文本文件的索引(Indexing)和搜索(Search

4.不负责由其他格式的文件抽取纯文本文件,或从网络中抓取文件的过程

 

在《Lucene in action》中,Lucene的架构和过程如下图所示:

说明Lucene是有索引和搜索的两个过程,包含索引创建、索引、搜索三个要点。让我们更细一些看Lucene的各组件。

 

1.被索引的文档用Document对象表示

2.IndexWriter通过函数addDocument将文档添加到索引中,实现创建索引的过程

3.Lucene的索引是反向索引

4.当用户查询请求时,Query代表用户查询语句

5.IndexSearcher通过函数search搜索Lucene Index

6.IndexSearcher计算Term WeightScore并且将结果返回给用户

7.返回给用户的文档集合用TopDocsCollector表示

 

那么,如何应用这些组件呢?让我们再详细到对Lucene API的调用实现索引和搜索过程。

 

一、索引创建过程如下:

1.创建一个IndexWriter用来写索引文件,它有几个参数,INDEX_DIR就是索引文件存放的位置,Analyzer便是用来对文档进行分析和语言处理的分词器。

2.创建一个Document代表我们要索引的文档。

3.将不同的Field加入到文档中。我们知道,一篇文档有多种信息,如题目、作者、内容、修改时间等。不同类型的信息用不同的Field来表示,在本例中,一共有两类信息进行了索引,一个是文件路径path,一个是文件内容contents。其中FileReaderSRC_FILE就表示要索引的源文件。

4.IndexWriter调用函数addDocument将索引写入到索引文件夹中。

 

二、搜索过程如下:

1.IndexReader将磁盘上的索引信息读入到内存,INDEX_DIR就是索引文件存放的位置。

2.创建IndexSearch准备进行搜索。

3.创建Analyer用来对查询语句进行词法分析和语言处理。

4.创建QueryParser用来对查询语句进行语法分析。

5.QueryParser调用parser进行语法分析,形成查询语法树,放到Query中。

6.IndexSearcher调用search对查询语法树Query进行搜索,得到结果TopScoreDocCollector

 

以上便上Lucene API函数的简单调用。宏观上来讲,Lucene的索引和搜索流程如下图所示:

然而当进入Lucene的源代码后,发现Lucene有很多包,关系错综复杂。通过下图,我们不难发现,Lucene的各源代码模块,都是对普通索引和搜索过程的一种实现。下图取自《开放源代码的全文检索引擎Lucenehttp://www.lucene.com.cn/about.htm

1.Luceneanalysis模块主要负责词法分析及语言处理而形成Term

2.Luceneindex模块主要负责索引的创建,里面有IndexWriter

3.Lucenestore模块主要负责索引的读写

4.LuceneQueryParser主要负责语法分析

5.Lucenesearch模块主要负责对索引的搜索

6.Lucenesimilarity模块主要负责对相关性打分的实现

 

PS:《Lucene in action》中的图是老了些,因其是针对lucene 1.4画的。详细到对Lucene API 的调用实现索引和搜索过程的图是lucene 2.9.0API,现在Lucene 3.0已经出来了。《开放源代码的全文检索引擎Lucene》写的也比较早了,很经典的一篇文章,可以帮助我们了解一些全文检索的基本原理。

 

参考博文:先觉《Lucene3.0原理与代码分析》http://www.cnblogs.com/forfuture1978/archive/2010/02/22/1671487.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值