什么是Solr中的DocValues。

时间:2018-12-14 13:52:27

标签: sorting solr inverted-index

我是Solr的新手。我读到Solr使用的倒排索引对于快速搜索结果非常有效。但是,如果查询包含排序,构面,则人们建议使用docvalue。所以我的问题是什么是docvalues,为什么在上述情况下需要使用docvalues,以及在上述情况下反向索引的效率如何? 如果可能,请提供示例的详细说明。

2 个答案:

答案 0 :(得分:1)

简短的答案是DocValues是一种优化,可以帮助人们与搜索相关联的Solr的其他一些功能提高内存利用率和性能。

来自Solr guide

  

DocValues是内部记录字段值的一种方法,   对于某些目的(例如排序和构面)而言,   传统索引。

     

为什么要使用DocValues?

     

Solr建立索引的标准方法是使用反向索引。   这种样式建立了在所有文档中找到的术语列表   每个术语的索引和旁边是该术语的文档列表   出现在(以及该术语出现在其中的次数   文献)。这使搜索非常快-由于用户按字词搜索,   具有准备好的术语到文档值的列表使查询过程   更快。

     

对于我们现在通常与搜索相关联的其他功能,例如   排序,分面和突出显示,这种方法不是很   高效。例如,构面引擎必须查询每个术语   出现在将构成结果集的每个文档中,以及   拉文档ID以构建构面列表。在Solr中,这   保留在内存中,并且加载速度可能很慢(具体取决于   文件,条款等的数量。)

     

在Lucene 4.0中,引入了一种新方法。 DocValue字段现在   在索引处建立具有文档到值映射关系的面向列的字段   时间。这种方法有望减轻一些记忆   fieldCache的要求,并进行构面,排序,   并更快地分组。

答案 1 :(得分:1)

为完成Hector的回答,我想说的是,在给定主要搜索查询的情况下,倒排索引可以有效地匹配文档。

现在,当涉及到筛选/排序/进行构面时,Solr会对结果集起作用,它已经在处理匹配的文档列表,并且任何子查询都将与主结果集相交或合并。

在这一点上,我们可以从逻辑上考虑文档到某种情况:例如,如果要通过 fieldX 对任意docID列表进行排序,则实际上将对fieldX值进行重新排序,然后获取相应的排序-docID。

因此,如果在为相关字段启用docValues的情况下构建fieldCache,则准备好使用文档到值的映射关系将大大改善fieldCache的使用。

我们也可能(也许有些不精确)指的是暖缓存与冷缓存。