Lucene总的来讲是:网络
- 一个高效的,可扩展的,全文检索库。
- 所有用Java实现,无须配置。
- 仅支持纯文本文件的索引(Indexing)和搜索(Search)。
- 不负责由其余格式的文件抽取纯文本文件,或从网络中抓取文件的过程。
在Lucene in action中,Lucene 的构架和过程以下图,函数

说明Lucene是有索引和搜索的两个过程,包含索引建立,索引,搜索三个要点。开放源代码
让咱们更细一些看Lucene的各组件:htm

- 被索引的文档用Document对象表示。
- IndexWriter经过函数addDocument将文档添加到索引中,实现建立索引的过程。
- Lucene的索引是应用反向索引。
- 当用户有请求时,Query表明用户的查询语句。
- IndexSearcher经过函数search搜索Lucene Index。
- IndexSearcher计算term weight和score而且将结果返回给用户。
- 返回给用户的文档集合用TopDocsCollector表示。
那么如何应用这些组件呢?对象
让咱们再详细到对Lucene API 的调用实现索引和搜索过程。blog

- 索引过程以下:
- 建立一个IndexWriter用来写索引文件,它有几个参数,INDEX_DIR就是索引文件所存放的位置,Analyzer即是用来对文档进行词法分析和语言处理的。
- 建立一个Document表明咱们要索引的文档。
- 将不一样的Field加入到文档中。咱们知道,一篇文档有多种信息,如题目,做者,修改时间,内容等。不一样类型的信息用不一样的Field来表示,在本例子中,一共有两类信息进行了索引,一个是文件路径,一个是文件内容。其中FileReader的SRC_FILE就表示要索引的源文件。
- IndexWriter调用函数addDocument将索引写到索引文件夹中。
- 搜索过程以下:
- IndexReader将磁盘上的索引信息读入到内存,INDEX_DIR就是索引文件存放的位置。
- 建立IndexSearcher准备进行搜索。
- 建立Analyer用来对查询语句进行词法分析和语言处理。
- 建立QueryParser用来对查询语句进行语法分析。
- QueryParser调用parser进行语法分析,造成查询语法树,放到Query中。
- IndexSearcher调用search对查询语法树Query进行搜索,获得结果TopScoreDocCollector。
以上即是Lucene API函数的简单调用。索引
然而当进入Lucene的源代码后,发现Lucene有不少包,关系错综复杂。ip
然而经过下图,咱们不难发现,Lucene的各源码模块,都是对普通索引和搜索过程的一种实现。内存
此图是上一节介绍的全文检索的流程对应的Lucene实现的包结构。(参照http://www.lucene.com.cn/about.htm中文章《开放源代码的全文检索引擎Lucene》)文档

- Lucene的analysis模块主要负责词法分析及语言处理而造成Term。
- Lucene的index模块主要负责索引的建立,里面有IndexWriter。
- Lucene的store模块主要负责索引的读写。
- Lucene的QueryParser主要负责语法分析。
- Lucene的search模块主要负责对索引的搜索。
- Lucene的similarity模块主要负责对相关性打分的实现。
了解了Lucene的整个结构,咱们即可以开始Lucene的源码之旅了。