译自http://www.lucenetutorial.com/basic-concepts.html

基本原理

Lucene是一个java全文检索引擎库,方便我们在应用或是网站中加入检索功能。

Lucene提供全文检索功能的原理是:将可被检索的内容加入到全文检索索引中,并提供对该索引的查询接口,返回排序后的查询结果,排序的依据既可以是与查询语句的相关度,也可以是某一任意字段例如文档的更新时间。

可被检索的内容可以有很多种来源,例如SQL/NoSQL数据库、文件系统,甚至包括网站。


检索和索引(Searching and Indexing

Lucene能够得到快速的检索响应是因为索引机制,它并不直接检索文本,而是对索引进行检索。这种机制类似于从一本书中根据关键字找出相关页面时,通过书末尾的索引找到,而非对书的每一页查找关键字。

(注:例如在一个书中查找包含关键字“北京”的页,索引机制会利用书后的索引“北京:18,27”得到结果,而非遍历每一页找符合条件的页)

这种索引被称为“倒排索引”,因为它将以页面为中心的数据结构(page->words)转变成了以关键字为中心的数据结构(word->pages)。


文档(document)

在Lucene中,文档(Document)是进行查找和索引的单元。

一个索引包含一个或多个文档。

建立索引(Indexing)主要涉及将document加入到IndexWriter,检索(Searching)主要涉及利用IndexSearcher从index中抽取document。

Lucene中的document并不一定是通常意义上由英语单词构成的文档。比如你给数据库中的用户表创建了一个lucene索引,索引中的每个用户可以被看做是一个Lucene document。


字段(fields)

一个document由多个field构成。一个field简单来说是一个名值对(name-value)。例如,在应用中常见的一个field是title。对于title字段,名是title,对应的值为title标题中包含的内容。

Lucene的建立索引涉及创建包含多个field的document,并且将document加入到IndexWriter中。


检索(Searching)

检索的前提要求是索引已被创建。检索包含创建query对象(一般用QueryParser接口),创建IndexSearcher对象,并利用query对象,返回匹配结果。


查询(Queries)

Lucene有其自己的迷你语言来执行查询。请到lucene查询语法阅读更多。

Lucene查询语法允许用户指定哪些field可以被检索,哪些field需要给定更高的权重,也提供了布尔查询功能和其他的功能。