_N.frq文件保存了lucene索引中每个term出现的doc的编号和频率等信息
FreqFile (.frq) --> <TermFreqs, SkipData> TermCount
TermFreqs --> <TermFreq> DocFreq
TermFreq --> DocDelta[, Freq?]
TermCount就是此段索引中分词出来的term的数量保存于tis文件中,tis文件中的对每个term的信息里保存了一个 FreqDelta 指针用于查找term对应的docnum和frq等信息,所以此文件并未保存termcount的信息。
tis文件中同样保存了包含此term的doc的数量 就是termFreqs中的DocFreq.
TermFreq保存了包含term的document的编号以及出现的频率。lucene对此项信息的存储格式如下:
DocDelta 记录了doc编号的信息,因为出现term的doccount并非一个所以此数组的存储中 后一个doc的编号信息依赖于前一个doc编号信息。
比如说项 '搜' 相对于content域出现在doc0 doc1 中 每个doc中出现的频率都为1次 那么存储格式如下:
1,3
DocDelta中同时保存了doc的编号和出现频率的信息。
doc的编号=DocDelta / 2 + 前一个doc编号
如果DocDelta 为奇数那么表示在此doc中出现的频率为1次 DocDelta 为偶数的话表明出现了多次 那么DocDelta值的后面会紧跟一个vint值表示出现的频率。
如 term '搜' 在doc0中出现了5次 在doc1中出现了1次 那么存储如下:
0,5,3
0/2 = 0 表示doc0的编号 因为0是偶数 所以后面的5表示出现在doc0中的频率
3/2 = 1 表示doc1与doc0 的编号差值 doc1的编号= 0+1 = 1,因为3是奇数所以在doc1中出现的频率就为1
这样表示的前提是omitTf 为false omitTf就是表示是否保存出现的频率和位置 默认情况下是要保存这些信息的 如果不保存的话 那么就没有频率信息 那么 DocDelta 只是表示出现term的document的编号 也就没有奇偶之分也没有除2的操作了 上面那个例子在不保存频率和位置信息的情况下 保存的内容如下:
0,1
prx文件的内容保存了每个term 在对应的document中出现的位置