6索引文件结构(3).docxVIP

  • 4
  • 0
  • 约4.51千字
  • 约 7页
  • 2018-07-15 发布于江苏
  • 举报
Lucene源代码剖析 3.3.3 Term频率数据(.frq) ???? ??? Term频率数据文件(.frq文件)存储容纳了每一个term的文档列表,以及该term出现在该文档中的频率(出现次数frequency,如果omitTf设置为fals时才存储)。 ???? ??? 版本包含的项父类型类型描述全部版本TermFreqsTermCountTermFreq按照term顺序排序,term是隐含的(?implicit),来自.tis文件。TermFreq按文档编号递增的顺序排序。SkipDataTermCountSkipData?TermFreq-DocDeltaTermCountVInt如果omitTf设置为false,要同时检测文档编号和频率,特别指出,DocDelta/2时该文档编号与上一个文档编号的差值(如果是第一个文档值为0)。当DocDelta为单数时频率为1,当DocDelta为偶数时频率为读取下一个VInt的值。如果omitTf设置为true,DocDelta为文档编号之间的差值(gap,不用乘以2,multiplited),频率信息则不被存储。TermFreq-[Freq?]TermCountVInt?SkipData-SkipLevelLengthNumSkipLevels-1VInt?SkipData-SkipLevelTermCountSkipDatums?SkipLevel-SkipDatumDocFreq/(SkipInterval^(Level + 1))SkipDatum?SkipData-SkipDatumTermCountSkipDatum?SkipDatum-DocSkip1VInt?SkipDatum-PayloadLength?1VInt?SkipDatum-FreqSkip1VInt?SkipDatum-ProxSkip1VInt?SkipDatum-SkipChildLevelPointer?1VLong??????????? ???? ??? 结构如下图所示: ????????? ????????????????????????? ?????? ??????? ? ??? 举例来说,当omitTf设置为false时,一个term的TermFreqs在文档7出现1次并且在文档11中出现3次,则为如下的VInt数字序列: ??????????????????? ??? 15, 8, 3 ?????????????? ??? 如果omitTf设置为true时,则为如下数字序列: ????? ??? 7, 4 ???????? ??? DocSkip记录在TermFreqs中每隔SkipInterval个文档之前的文档??号。如果该term的域fields中被禁用payloads时,则DocSkip呈现在序列中(in the sequence)与上一个值之间的差值(difference)。如果payloads启用时,则DocSkip/2表示序列中与上一个值之间的差值。如果payloads启用并且DocSkip为奇数时,PayloadLength将被存储并表示(indicating)在TermPositions中第SkipInterval个文档之前的最后一个payload的长度。FreqSkip和ProxSkip分别(respectively)记录在FreqFile和ProxFile文件中每SkipInterval个记录(entry)的位置。文件的位置信息对序列中前一个SkipDatumn来说与TermFreqs和Positions的起始信息相关。 ??????? ??? 例如,如果DocFreq=35并且SkipInterval=16,则在TermFreqs中有两个SkipData记录,容纳第15和第31个文档编号。第一个FreqSkip代表第16个SkipDatumn起始的TermFreqs数据开始之后的字节数目,第二个FreqSkip表示第32个SkipDatumn开始之后的字节数目。第一个ProxSkip代表第16个SkipDatumn起始的Positions数据开始之后的字节数目,第二个ProxSkip表示第32个SkipDatumn开始之后的字节数目。??????? ????????? ??? 在Lucene 2.2版本中介绍了skip levels的想法(notion),每一个term可以有多个skip levels。一个term的skip levels的数目等于NumSkipLevels = M

文档评论(0)

1亿VIP精品文档

相关文档