Lucene 6.0 索引结构

    xiaoxiao2026-02-12  12

    1.复合文件索引

    该模式是默认的。

    1.1 目录结构

    图 1-1 复合文件索引

    1.2 _x.cfe

    1.3 _x.cfs

    1.4 _x.si

    2.多文件索引

    IndexWriterConfig org.apache.lucene.index.IndexWriterConfig.setUseCompoundFile(boolean useCompoundFile) 调用此函数可以设为多文件索引模式。

    2.1 目录结构

    图2-1 多文件索引

    2.2 _x.fdt

    通常在搜索打分完毕后,IndexSearcher会返回一个docID序列,但是仅仅有docID我们是无法看到存储在索引中的document,这时候就需要通过docID来得到完整Document信息,这个过程就需要对fdx/fdt文件进行读操作。 fdx/fdt文件就是Lucene的正向文件。有一个比喻:如果fdt是一本书的正文,那么fdx则是书的目录。显然fdt文件大于fdx。 通过docID读取到document需要完成Segment、Block、Chunk、document四级查询。Segment、Block、Chunk的查找都是二分查找,速度很快,但是Chunk中定位document则是顺序查找,所以Chunk的大小直接影响着读取的性能。

    fdt文件的基本单位是Chunk

    当你在程序中存储某个域时(使用Field.Store.YES选项),该域会被写入两个文件:.fdx与.fdt。

    2.3 _x.fdx

    fdx的基本单位是Block。一个Block由三个部分组成,见图2-2,.fdx文件结构。最顶层的ChunkIndex跟倒数第三层的BlockCunks不是一个东西。

    · BlockChunks表示当前Block中Chunk的个数;

    · <DocBases>表示当前Block中每个Chunk的doc个数,可以看作一个数组;

    · <StartPointers>表示当前Block中每个Chunk在fdt文件中的起始位置,其结构与<DocBases>相同。

    图2-2 .fdx文件结构

    2.4 _x.fnm

    .fnm文件存储了段中相关文档的所有field信息。包括“该域是否被索引?该域是否允许使用项向量?”等。 此文件中的field不一定按字母顺序排列,每个field都有一个fieldNo编号,它会在其他索引文件中被用到,用来节省空间。

    2.5 _x.nvd

    2.6 _x.nvm

    2.7 _x.si

    3.共同的文件

    3.1segments_x

    x为IndexWriter的写入次数,从1开始计数。

    最新回复(0)