源码系列索引文件的生成五之
在前面的四篇文章中,我们介绍了生成索引文件 .tim、.tip、 .doc、 .pos、.pay 中.doc、.pos、.pay 这三个索引文件的内容,接着我们继续图 1 中剩余的内容,即流程点 生成索引文件.tim、.tip
。
生成索引文件。tim、.tip、.doc、.pos、.pay 的流程图
图 1:
对于图 1 的流程图的介绍,可以看文章 索引文件的生成(一)之 doc&&pay&&pos,我们同样以流程图的方法来介绍生成索引文件。tim、.tip 的逻辑。
生成索引文件。tim、.tip 的流程图
图 2:
图 2 的流程描述的是一个域生成索引文件。tim、.tip 的流程图。
准备数据
图 3:
将包含当前 term 的文档号 docId,以及在这些文档内的出现频率 frequency,位置信息 position、payload 信息、偏移信息 offset 写入到索引文件.doc、.pay、.pos 之后,会生成 IntBlockTermState 对象,该对象包含了以下的信息作为处理索引文件。tim、.tip 的准备数据:
- singletonDocID:该值如果不为-1,说明只有一篇文档包含当前 term,那么 singletonDocID 的值为对应的文档号,singletonDocID 的存在会影响索引文件的数据结构,在
生成InnerNode
流程点会介绍该值的影响 - lastPosBlockOffset:如果该值为-1,说明 term 在所有文档中的词频没有达到 128,即没有生成一个 block(见文章 索引文件的生成(二)),如果至少存在一个 block,那么该值描述的是 VIntBlocks 在 索引文件.pos 中的起始位置,见图 4
- docStartFP:当前 term 的文档号 docId、词频信息 frequency 在索引文件.doc 的起始位置
- posStartFP:当前 term 的位置信息 position 在索引文件。pos 的起始位置
- payStartFP:当前 term 的偏移位置 offset,payload 在索引文件。pay 的起始位置
- skipOffset:当前 term 的跳表信息在索引文件.doc 的起始位置
上述值在索引文件中的位置如下所示:
图 4:
索引文件。tim 又称为 Term Dictionary,所以在读取阶段,我们是先通过读取索引文件。tim 来得到在索引文件.doc、.pos、pay 的信息。
- docFreq:包含当前 term 的文档数量
- totalTermFreq:当前 term 在所有文档中出现的词频和值
上述的两个信息是在生成索引文件.doc、.pay、.pos 的过程中记录的,其记录的时机点如下所示:
图 5:
生成 NodeBlock
图 6:
每当处理一个新的 term 之前,我们先要 统计term栈中的prefixTopSize
。
term 栈跟 prefixTopSize 是什么
term 栈即存放 term 的栈,prefixTopSize 是跟栈顶 term 有相同前缀的 term 数量,例如待处理的 term 集合如下所示:
|
|
图 7:
- 原文作者:知识铺
- 原文链接:https://index.zshipu.com/geek/post/%E4%BA%92%E8%81%94%E7%BD%91/%E6%BA%90%E7%A0%81%E7%B3%BB%E5%88%97%E7%B4%A2%E5%BC%95%E6%96%87%E4%BB%B6%E7%9A%84%E7%94%9F%E6%88%90%E4%BA%94%E4%B9%8B/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。
- 免责声明:本页面内容均来源于站内编辑发布,部分信息来源互联网,并不意味着本站赞同其观点或者证实其内容的真实性,如涉及版权等问题,请立即联系客服进行更改或删除,保证您的合法权益。转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。也可以邮件至 sblig@126.com