lucene查询索引的6个步骤

Posted 中中

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lucene查询索引的6个步骤相关的知识,希望对你有一定的参考价值。

先准备数据源,以两个文件名字符串做为值,保存两个document,如下图:


然后以"path:txt"为查询条件,来查询索引文件。我调试发现会有6个步骤。数据主要来源于3个文件,tim、doc、fdt。

1.先根据查询字段与词找出该字段所有的term(.tim文件中的terms)

lucene查询索引的6个步骤


2.加载tim文件(seekExact方法中currentFrame.loadBlock)
从terms查到匹配的term,匹配term下标记录在SegmentTermsEnumFrame.nextEnt( SegmentTermsEnumFrame.scanToTermLeaf(BytesRef, boolean) line: 567)

lucene查询索引的6个步骤

3.从.tim的stats里取出词频,metadata里取出位置信息

lucene查询索引的6个步骤


4.如果命中多个doc,定位到它们在doc文件的开始下标

lucene查询索引的6个步骤

5.1 单个doc,直接取出tim metadata里的singletonDocID

lucene查询索引的6个步骤

5.2 多个doc,读出所有docId

lucene查询索引的6个步骤


6.根据docId,从fdt文件中取出原字符串。

lucene查询索引的6个步骤



最后总结下查询过程如下图,虽然这个过程比较简单,但它是基于一个强大的索引文件结构。这个索引结构很复杂,主要数据结构有:分词信息在tim文件、倒排doc列表在doc文件、原数据在fdt文件。





以上是关于lucene查询索引的6个步骤的主要内容,如果未能解决你的问题,请参考以下文章

Elk的理论与实践

Elasticsearch调优篇 01 - Elasticsearch 倒排索引这一篇足够了

.NET开发过程中的全文索引使用技巧之Solr(转)

联合分组子查询视图事务python操作mysql索引

数据库05 /索引原理/创建用户和授权/数据库备份/慢查询优化/正确使用索引

索引创建和搜索