lucene索引结构(三)-词项向量(TermVector)索引文件结构分析

0. 事先对代码进行的一点修改
     当我准备开始分析此项向量索引文件的时候,突然发现我的索引程序生成的索引文件里没有.tvx,.tvd,.tvf这三个文件。看了看lucene文档,才知道了"Term Vector support is an optional on a field by field basis. "。
     
     喔!原来是个可选的。那么意思就是说不生成这种索引,一次检索过程也能正常的完成,获取我们想要的信息。那它有啥用呢,反正肯定是有用的,要不Lucene让我们选了作甚。具体的作用可参见本文1.1节。

     将生成索引的代码改了下,
      doc.add(new Field("path", f.getPath(), Field.Store.YES, Field.Index.NOT_ANALYZED,Field.TermVector.WITH_POSITIONS_OFFSETS ));

      doc.add(new Field("modified",
        DateTools. timeToString(f.lastModified(), DateTools.Resolution.MINUTE ),
        Field.Store. YES, Field.Index.NOT_ANALYZED ,Field.TermVector.WITH_POSITIONS_OFFSETS));

      BufferedReader br = new BufferedReader(read);
    doc.add(new Field( "contents", br));

为"path"和"modified"这2个域存储了TermVector信息。注意代码中的Field.TermVector. WITH_POSITIONS_OFFSETS。
     它表示既保存这两个域的词项的位置信息,又保存偏移信息。

     执行程序,发现生成的索引中包含了.tvx,.tvd,.tvf文件,下面就对他们进行分析。

1. 词项向量索引文件(.tvx,.tvd,.tvf)结构分析
1.1 作用

     还是和之前一样,再介绍词项向量索引文件结构之前,先来介绍一下它的作用也即存在的必要性。

     一个文档(Document)是含有多个域(Field),而每个域是可以含有1个或多个Term的。所谓Term,也就是Filed里的文本字符串经过分析(比如分词)后得到的一系列词项信息。

     而倒排索引里,记录的是由词项-->文档x,文档y,...文档z的这么一种关系,是一种反向的信息。

     而当你想知道某篇文档的某个域有多少个词项,这些词项(Term)在这个域包含的文本中出现的频率(TermFreq),出现的位置(Positions),每次出现对应的偏移(Offsets)时,这时候就需要TermVector索引出马了(PS:显然,这是一种正向索引)。

     什么?还是不太明白?那我举个例子。 (Note:我不太清楚具体的search engine是不是按我说的这样实现的,但我觉得应该是)
     
      如下图,搜索"尤文图斯"的时候,搜索结果的标题中对"尤文图斯"(或者同义词,juventus)都采取了飘红处理。

     标题是文档的一个域(field:title),这个域所含的文本字符串,是可以被lucene保存的(Field.Store.YES),当搜索完毕需要展示的时候,对标题所含的关键词做飘红可以明显提高UX。
     
     如果没有TermVector索引,那我们只能根据文档的id取出这个文档的title域的值,然后,在这个值里搜索"尤文图斯",显然,这是相当brute-force的策略。

     当我们有了TermVector之后,可以根据文档id查出这个文档对应的域的词项信息(偏移,频率等),如果这些词项里含有"尤文图斯"四个字的话,那我们就把它的偏移拿出来,然后在title中直接做飘红就好啦。

     正如Lucene in Action上面所说,提高标题飘红功能的性能,是TermVector索引一个重要的作用。


1.2. TermVector索引文件结构分析
  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值