边学边记(九) lucene索引结构详解五(_N.frq,_N.prx)

_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中出现的位置

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值