Lucene源码分析之倒排索引(一)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Lucene源码分析之倒排索引(⼀)
倒排索引是 Lucene 的核⼼数据结构,该系列⽂章将从源码层⾯(源码版本:)分析。

该系列⽂章将以如下的思路展开。

1. 什么是倒排索引?
2. 如何定位 Lucene 中的倒排索引?
3. 倒排索引是如何搜索的?
4. 倒排索引是如何增删改的?
本⽂将介绍什么是倒排索引。

了解什么是倒排索引,其实是去了解为什么要有倒排索引。

考虑这样⼀种场景,给你很多篇⽂档,现在要求找出包含指定单词的⽂档。

第⼀种解决⽅案,遍历所有⽂档,⾃然能得到结果。

第⼆种解决⽅案,遍历所有⽂档,得到结果后记录下来,下次再有这种请求时直接读取结果。

如果把所有单词的结果都记录下来,之后的任何请求都能直接从结果中读取,这个结果的集合就叫做倒排索引。

以两个⽂档为例:
1.hello world!
2.hello china!
如何找出包含 china 的⽂档?⼀眼扫过去就知道是第 2 个⽂档(但在⽂档数量很多内容很⼤的情况下,可能需要很多眼)。

但如果将所有结果(即倒排索引)提前记录如下。

单词⽂档
hello1,2
world1
china2
让你找出包含 china 的⽂档。

不需要再去扫⽂档,根据倒排索引可知是第 2 个⽂档(在⽂档数量很多内容很⼤的情况下,能极⼤地提升效率)。

有些同学会问,两种解决⽅案都要去遍历⽂档,为什么采⽤第⼆种解决⽅案?因为后者只需要遍历⼀次,以后每次查询的时候直接查询倒排索引即可。

有些同学会问,如果采⽤第⼆种解决⽅案,当增删改⽂档的时候,倒排索引⽂件就不对了,那还是得重新遍历⼀次?不需要,将增删改⽂档转换为增删改倒排索引即可。

有些同学会问,增删改倒排索引的性能会不会很差?这个答案会在后⾯的⽂章中给出。

⽽这也成为 Lucene 不断优化的⽬标之⼀。

相关文档
最新文档