【elasticsearch】Apache Lucene简介

1.Apache Lucene简介

Elasticsearch 使用Apache Lucene 创建索引,同时也使用lucene 进行搜索。
Lucene 成熟,高性能,可扩展,轻量级以及强大的功能。Lucene内核可以创建 
为独立的Java库文件并且不依赖第三方代码,用户可以使用它提供的各种所见
即所得的全文检索功能进行索引和搜索操作。Lucene有很多扩展功能,如多语言
处理,拼写检查,高亮显示等。可以下载单个Lucene内核库文件,直接在应用程序中使用。

2.Apache Lucene的总体架构

Lucene的基本概念 
文档:(document):索引与搜索的主要数据载体,它包含一个或多个字段,存放将要写入 
或将从索引搜索出来的数据。
字段:(field):文档的一个片段,它包括两个部分:字段名称和内容。
词项:(term):搜索时的一个单位,代表文本中的某个词。
词条:(token):词项在字段中的一次出现,包括词项的文本,开始和结束的位移以及
类型。

Lucene将写入索引的所有信息组织成一种名为倒排索引的结构。该结构是一种将词项 
映射到文档的数据结构。其工作方式与传统的关系数据库不同,倒排索引是面向词项
而不是面向文档。


每个词项指向该词项所出现过的文档数。这种索引组织方式支持快速有效的搜索操作,
例如给予词项的查询。除了词项之外,每个词项还有一个与之关联的计数(即文档频率),
用来高速Lucene这个词项在多少个文档中出现过。

现实中,Lucene创建的索引更为复杂,也更先进,因为索引中还存储了很多其他信息,
如 词向量(为单个字段创建的小索引,存储该字段中所有的词条),各字段的原始信息,
文档删除标记等。

每个索引由多个段组成,每个段只会被创建一次,但会被查询多次。索引期间,
段经创建就不会再被修改。文档被删除以后,删除信息被单独保存在一个文件中, 
而段本身并没有修改。

多个段会在一个叫做段合并的阶段被合并在一起。而且要么强制执行,要么由Lucene
的内在机制决定在某个时间执行,合并后的段数量更少,但是更大。段合并非常耗IO,
且合并期间有些不再使用的信息也将被清理掉,如被删除的文档。对于容纳相同数据的
索引,段的数量较少时,搜索速度更快。由于段合并非常耗费IO,不要强制进行段合并,
而是由Lucene自动执行段合并的任务。

3.数据分析 

文档中的数据转化为倒排索引,而查询转换为搜索的词项,这个过程叫做分析;
文本分析由分析器来执行,而分析器由分词器(tokenizer),过滤器(filter),字符
映射器组成(character mapper);

lucene的分词器用来将文本切割成词条,其中携带各种额外信息的词项,这些信息 
包括:词项在原始文本中的位置,词项的长度。分词器的工作成功称为词条流,因为 
这些词条被一个接一个地推送个过滤器处理。

过滤器也是Lucene分析器的组成部分,过滤器数额可选,可以为0个,1个或多个,
用于处理词条流中词条。它可以移除,修改词条流中词条,甚至可以创造新的词条。
Lucene提供了很多现成的过滤器,我们也可以根据需要实现新的过滤器。
过滤器:
小写过滤器:将所有词条转换为小写。
ASCII过滤器:移除词条中所有非ASCII字符。
同义词过滤器:根据同义词规则,将一个词条转换为另一个词条。
多语言词干还原过滤器:将词条的文本部分规约到他们的词根形式,即词干还原。
当分析器中有多个过滤器时,会逐个处理,理论上可以有无限多个过滤器。

4.索引与查询 

Lucene以及所有基于Lucene的软件,是如何控制索引和查询操作的。
在索引期,Lucene使用我们选择的分析器来处理文档中内容,并可以对不同的字段
使用不同的分析器。在检索时,如果使用了某个查询分析器,那么查询串就会被分析。
也可以选择不进行查询分析。Elasticsearch 中有些查询会被分析,有些不会分析。
前缀查询不会被分析,匹配查询会被分析。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值