Lucene简介

6-09 1,410 views

Lucene是Apache基金会下的一个开源项目,提供能够实现全文索引和检索的Java API。Lucene包含索引引擎和检索引擎两部分。对于包含多个字段(Field)的文档(Document),可以通过Lucene的索引引擎对文档字段中的文本内容进行分词处理,构建关键字索引。当索引构建完成后,可以通过Lucene的检索引擎对特定字段进行基于关键字的查询。Lucene支持多种查询方式,包括模糊检索、分组查询等。对于查询结果,Lucene使用基于向量空间模型的排名算法计算得出查询结果的排名。

1.1 倒排索引

倒排索引(Inverted Index)是一种索引数据结构。在倒排索引中,词语被映射到包含该词语的文档。通过使用倒排索引,可以实现快速的全文搜索。一个简单的倒排索引及其构建过程如图1.1所示,其中文档d1和d2的内容分别是“home sales rise in July”和“increase in home sales in July”。
对于文档d1和d2,首先进行分词处理,将文本内容划分为词语集。因为在英文文本中,单词之间均有空格,所以使用空格作为分隔符进行分词处理,得到词语集,如图1.1中左侧一列。对于划分后的词语集,进行统计,统计词语及其出现的次数和位置,如图1.1中右侧一列,构成倒排索引。

145058597
图1.1 倒排索引及其构建过程

1.2 Lucene工作原理

145246460

Lucene中包含了以下6个核心包:
1)org.apache.lucene.document包,包含了用于表示文档及其内容的类,如表示文档的Document类,表示文档中字段的Field类。
2)org.apache.lucene.index包,包含了用于构建、读取索引的类。
3)org.apache.lucene.analysis包,包含了用于对文档中的自然语言文本进行分词处理的类。
4)org.apache.lucene.store包,包含了用于存储索引的类。
5)org.apache.lucene.search包,包含了用于查询索引的类。
6)org.apache.lucene.queryParser包,包含了用于构建、解析查询条件的类。
在Lucene的倒排索引中,包含字段(Field)、文档(Document)、关键字(Term)这三个部分。每一个关键字均与一个集合相映射。集合中的每一个元素为一个二元组(Document,Field),表示该文档的该字段包含此关键字。Lucene的工作原理如图所示,主要分为以下6个步骤:
1)为每一个待检索的文件构建Document类对象,将文件中各部分内容作为Field类对象。
2)使用Analyzer类实现对文档中的自然语言文本进行分词处理,并使用IndexWriter类构建索引。
3)使用FSDirectory类设定索引存储的方式和位置,实现索引的存储。
4)使用IndexReader类读取索引。
5)使用Term类表示用户所查找的关键字以及关键字所在的字段,使用QueryParser类表示用户的查询条件。
6)使用IndexSearcher类检索索引,返回符合查询条件的Document类对象。

1.2 Lucene应用示例

标签:

基于WebSocket实现微信小程序的消息推送

微信小程序支持通过基于WebSocket进行消息推送,提供了相应的API,例如创建连接示例代码: JavaScript wx.connectSocket({ ...

阅读全文

基于nginx-sticky-module-ng实现会话保持(Sticky Sessions)

对服务进行集群部署,前端进行负载均衡时,需要实现会话保持,对于同一会话的多个请求,通过集群中的一个节点来提供服务。系统的部署结构如图所示,通过Resin...

阅读全文

ActiveMQ基于Zookeeper和LevelDB实现Master/Slave

ActiveMQ的Master/Slave目前支持三种实现方式: 1)Shared File System Master Slave; 2)JDBC Master Slave; 3)Replicated LevelDB Store。 对于第三种方...

阅读全文