lucene不是一个完整的全文检索应用,它是用JAVA写的全文检索的工具包。
Lucene选择面向对象的方法将搜索引擎的架构模块化,可以选择多种语言来实现这个搜索引擎而不必改变整体架构。
我们给出它的体系结构图。请参考下图:

图 Lucene软件架构
各个模块是使用符合MDA规则的,方便用户选择有效的接口,也为用户定制自己所需的各个模块提供高可扩展性。各个模块之间保持固定的协议,将实现方法隐藏起来。
从图1.6我们可以了解到,Lucene一共分为5个模块,分别是:Corpus(语料库)、Analysis(解析)、Index(索引)、Storage(存储)、Search(搜索)。每一模块从逻辑上又可以再划分为2部分:交互协议部分与具体实现部分。
Corpus(语料库)中是需要被解析的文档。语料库为Analysis模块提供了访问协议,Analysis通过该协议得到料库的内容。
Analysis(解析)模块为搜索Search(模块)和Index(索引)模块提供了相同的解析过程(交互协议相同)。Lucene建立索引过程中,需要对被索引的文件进行分析;对于搜索过程而言,用户输入的查询条件,也需要通过解析(Analysis),通过相同的解析过程后,用户的查询信息才能和从文本解析出的信息相匹配,才能返回给用户正确的结果。
Index(索引)模块提供2种访问协议。一种为搜索提供访问,另一种协议为维护索引提供服务。使用Lucene创建索引时,需要对文本内容建立索引;而对索引维护也可以通过该接口访问索引,更新索引信息,优化索引。
Storage(存储)模块也提供了2种保存索引方式,一种将索引信息存放在内存中,一种针对索引信息存放在物理磁盘中。RAM存储接口可以批量地索引文件,加快标引速度。
Search(搜索)模块是用户和Lucene交互的一个窗口。用户输入的内容都通过该模块进入到Lucene的内部,然后通过Search模块,最后返回给用户相关信息,完成查询工作。
lucene包包括:
org.apache.lucene.document
这个包提供了一些为封装要索引的文档所需要的类,比如 Document, Field。这样,每一个文档最终被封装成了一个 Document 对象。
org.apache.lucene.analysis
这个包主要功能是对文档进行分词,因为文档在建立索引之前必须要进行分词,所以这个包的作用可以看成是为建立索引做准备工作。
org.apache.lucene.index
这个包提供了一些类来协助创建索引以及对创建好的索引进行更新。这里面有两个基础的类:IndexWriter 和 IndexReader,其中 IndexWriter 是用来创建索引并添加文档到索引中的,IndexReader 是用来删除索引中的文档的。
org.apache.lucene.search
这个包提供了对在建立好的索引上进行搜索所需要的类。比如 IndexSearcher 和 Hits, IndexSearcher 定义了在指定的索引上进行搜索的方法,Hits 用来保存搜索得到的结果。
org.apache.Lucene.store
这个包提供了底层IO/存储结构
org.apache.Lucene.util
这个包提供一些公用的数据结构
org.apache.Lucene.queryParser
这个包提供了查询的分析器
lucene的实现机制:
索引数据源:doc(field1,field2...) doc(field1,field2...)......
\ indexer /
_____________
| Lucene Index |
---------------------
/ searcher \
结果输出: Hits(doc(field1,field2) doc(field1...)......)
lucene应用流程:
1。建立索引 用Document(field字段)来创建index(包括分词和持久化等等):Document, Field, IndexWriter, Analyzer, Directory
2。中文分词 analysis:自动切分和词表切分;正向切分、反向切分和双向切分
3。搜索结果 search 结果hits:IndexSearcher, Term, Query, TermQuery, Hits
TAG: LUCENE lucene 全文检索 Lucene




