Lucene DocValues详解

本文深入探讨了Lucene的DocValues特性,解释了为何在倒排索引基础上需要正向索引。DocValues提供了列存储,用于快速访问文档字段值,适用于排序、分面、分组等操作。文章介绍了DocValues的存储结构、类型、应用场景和不同格式,强调其在提高搜索效率和减少IO方面的作用。
摘要由CSDN通过智能技术生成

今天斗胆来试试DocValues,对于DocValues我想大家都不会觉得陌生,同时又不是非常熟悉,就是那种熟悉而又陌生的感觉。

一、docValues是什么鬼呢?

DocValues在LUCENE-3518才引入新特征,初生在Lucene4.0,由Mike(Michael McCandless)提出的。从此Lucene牛逼轰轰了。

  • 先来介绍一下什么是倒排索引(反向索引),什么是正向索引。
  1. 倒排索引
    倒排索引,又称反向索引。故名思义是从term反向找到文档,存储结构是词条对应含有该词条的文档集。倒排索引是全文检索的基础,让全文检索的效率大大的提高。通常使用倒排索引来避免在每篇文档中使用冗长的顺序查找查询词。
  2. 正向索引
    正向索引,即是通过文档号找到字段的。

1.1 倒排那么好,为什么还需要正向索引呢?

接下来一段的话,大神略过。我们再来回顾一下倒排索引的搜索排序过程

我们已经知道倒排表存储了term 对就在的 docIds,也就是说我们可以用它非常高效的找到所有含有查询词的文档得到一个结果集。这个结果集含有满足查询条件的docid(即文档号),这个结果集极有可能非常大。
这里有两个非常重要的件:1. 结果集只有含文档号,不含文档的内容;2. 这个结果集很大,有很多个文档号。
当然一般来我们并不需要整个结果集,只需要按一定条件topK。

  1. 一定条件是指按相似度(Similarity得分)排序时,倒排索引依然非常完美。
  2. 一定条件是指除相似度排序之外,还需要依赖文档的一个或者多个字段时(即sort=f desc),其实是不是必须读取原文档,然后对应字段拿出来排序呢?答案是肯定。

所以倒排索引很好,但好像并不能解决一切问题。

  1. 对索引文件的变小了,之前需要存储了全文档,现在单字段。——可以减少移动的长度
  2. 少了读到文档要还要进行二次解释找到字段值的过程。—— 减少运算

对应此场景这个优化过程看似并不起眼,实际上在数据比较大的时候效果还是比较显著的。
按正向索引的定义,正向索引就是上面的优化方案,通过文档号直接找到字段值。因此正向索引又称为列存储

二、正向索引

solr docs对docValues的说明如下:

The standard way that Solr builds the index is with an inverted index. This style builds a list of terms found in all the documents

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值