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

摘要:
查询哪些文档包含某个单词元素是Lucene搜索的一个非常基本的功能。上层的搜索功能和索引功能应基于该功能构建。基于上述考虑,SegmentTermPositions通过继承SegmentTermDocs来获得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的文档移动。

免责声明:文章转载自《遍历倒排索引核心类:SegmentTermDocs/SegmentTermPositions》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇PhaseScorer:感慨高手写的代码就是精炼Lucene搜索核心代码TermInfosReader下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

HTTPS、SPDY和HTTP/2的性能比较

http://www.infoq.com/cn/news/2015/02/https-spdy-http2-comparison/ https://segmentfault.com/a/1190000002765886 SPDY对当前的HTTP协议有4个改进: 多路复用请求; 对请求划分优先级; 压缩HTTP头; 服务器推送流(即Server P...

位运算与组合搜索(一)

我们知道,一个集合的子集通常可由一个位串来表示,比如对于集合 {a, b, c, d, e},可用位串 s = ”11001” 来表示其子集 {a, b, e}。当集合的大小不大于机器的字长(在下文中将假设字长为32)时,这些位串又可用一个无符号整数来表示,比如上面的 s 可以存储为 0b10011 = 19。在此种情形下,很多集合操作都可以通过位运算来完成...

MySQL中的各种引擎

数据库中的存储引擎其实是对使用了该引擎的表进行某种设置,数据库中的表设定了什么存储引擎,那么该表在数据存储方式、数据更新方式、数据查询性能以及是否支持索引等方面就会有不同的“效果”。在MySQL数据库中存在着多种引擎(不同版本的MySQL数据库支持的引擎不同),熟悉各种引擎才能在软件开发中应用引擎,从而开发出高性能的软件,MySQL数据库中的引擎有哪些呢?一...

js中遍历对象的属性和值

今天想看一下js的数组遍历的内容,搜索到了一个关于对象遍历写好的函数,保留一下。以后好用。 function allPrpos ( obj ) {// 用来保存所有的属性名称和值var props = "" ;// 开始遍历for ( var p in obj ){ // 方法if ( typeof ( obj [ p ]) == " function "...

Mybatis-动态 SQL语句

if标签 判断语句,用户单条件分支判断 where标签 为了简化上面where 1=1的条件拼装,我们可以采用标签来简化开发 同 foreach标签 场景:传入多个 id 查询用户信息标签用于遍历集合,它的属性:collection:代表要遍历的集合元素,注意编写时不要写#{}open:代表语句的开始部分close:代表结束部分item:代表遍历集合的每个元...

Mysql主键索引、唯一索引、普通索引、全文索引、组合索引的区别

(转)仅供自己学习,特此记录 Mysql索引概念:说说Mysql索引,看到一个很少比如:索引就好比一本书的目录,它会让你更快的找到内容,显然目录(索引)并不是越多越好,假如这本书1000页,有500也是目录,它当然效率低,目录是要占纸张的,而索引是要占磁盘空间的。 Mysql索引主要有两种结构:B+树和hash. hash:hsah索引在mysql比较少用,...