遍历倒排索引核心类:SegmentTermDocs/SegmentTermPositions

  查询有哪些文档包含某个词元是Lucene搜索非常基础的一个功能,上层的搜索功能和索引功能都要基于这个功能来搭建。SegmentTermDocs就是查询词元所属文档的核心类,SegmentTermPositions的功能是查询某个词元在某个文档中出现的位置,这个在需要在搜索时返回词元位置时会用到。

这两个类的设计思路:

  SegmentTermDocs负责遍历词元所属文档,所属文档数据在.frq文件中,所以SegmentTermDocs类里都是.frq文件的读写操作,而SegmentTermPositions文件负责遍历某个词元在某个文档中出现的位置,位置数据在.prox文件中,但是如果要遍历某个词元在某个文档中的位置数据,首先待获取某个词元的所属文档列表,而所属文档列表的遍历正是SegmentTermDocs的功能。

  基于已上的考虑,SegmentTermPositions通过继承SegmentTermDocs来获得SegmentTermDocs的功能,所以如果直接实例化SegmentTermPositions使用,则同时获得遍历词元所属文档和遍历该词元在当前文档中位置的功能。

  这种继承关系是如何设计的? 因为SegmentTermPositions需要词元频率来决定当前文档遍历的位置是否结束,还有SegmentTermDocs在移动到下一个文档时需要同步将prox文件指针移动到相应位置,所以SegmentTermDocs定义了可以继承的freq属性来给SegmentTermPositions传递词元在当前文档频率值,还有定义了skipProx()和skippingDoc()这两个可继承方法给SegmentTermPositions,让SegmentTermPositions来移动prox文件位置以满足SegmentTermDocs的文档移动。

原文地址:https://www.cnblogs.com/caiyao/p/12056789.html