我是Solr的新手。我读到Solr使用的倒排索引对于快速搜索结果非常有效。但是,如果查询包含排序,构面,则人们建议使用docvalue。所以我的问题是什么是docvalues,为什么在上述情况下需要使用docvalues,以及在上述情况下反向索引的效率如何? 如果可能,请提供示例的详细说明。
答案 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的使用。
我们也可能(也许有些不精确)指的是暖缓存与冷缓存。