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.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开始计数。