从谈谈lucene倒排索引的存储方式(3-1)的内容可知,当拥有最大公共前缀的词的个数达到minItemsInBlock的阈值时,会将这些有公共前缀的词写到一个block中,现对其进行分析。post
在对writeBlocks方法分析时,可先分析writeBlock方法,首先abc、abcd、abcde能够写在一个block中,从可知先将每一个词的后缀写入到suffixWriter流中,经过
可知,再写入该词对应的postings信息,而且采用了压缩存储,这个细节放到之后再说,这里的重点是词的构建方式,如今能够将postings信息当作词对应的value。当这三个都写入后,表明一个block已经生成,见最后一行代码:
。.net
对于PendingBlock而言,prefix比较好理解即公共前缀,startFP是termsOut流的文件指针,与该block相关的metaWriter、suffixWriter等流的数据会所有写入到termsOut流中。至于其它变量hasTerms 、isFloor等下篇再分析。 指针
再看看compileIndex方法,从能够看出FST是以block为基本单位的,而不是以词为单位。慢慢又开始复杂了。。。blog