【问题标题】:What is DocValues in Solr.Solr 中的 DocValues 是什么。
【发布时间】:2018-12-14 13:52:26
【问题描述】:

我是 Solr 的新手。我读到 Solr 正在使用倒排索引,这对于快速搜索结果非常有效。但如果查询包括排序、分面,人们建议使用 docvalues。所以我的问题是什么是 docvalues 以及为什么我们需要在上述情况下使用,以及在上述情况下反转索引如何无效。 如果可能,请用例子详细说明。

【问题讨论】:

    标签: sorting solr inverted-index


    【解决方案1】:

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

    现在,当涉及到过滤/排序/分面时,Solr 作用于结果集,它已经在处理匹配文档的列表,并且任何子查询都将与主结果集相交或联合。

    此时,我们可以从逻辑上考虑文档到某物的情况:例如,如果您要按 fieldX 对任意 docID 列表进行排序,您实际上会重新排序 fieldX 值并获取对应的 - sorted - docID。

    因此,如果在构建 fieldCache 时为相关字段启用了 docValues,那么准备好使用文档到值的映射将大大提高 fieldCache 的使用率。

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

    【讨论】:

    • 这很有道理,但为什么文档提到排序和分面而没有明确提到过滤?如果将字段指定为“indexed”而不是“docValues”,过滤性能会更好吗?
    • @AhmadAbdelghany 我认为该文档并不明确,因为准备好使用文档到值的映射可以极大地改善 fieldCache 的使用,这并不意味着过滤器查询需要映射,实际上它们在大多数情况下不会:过滤只是使与基本field:value q & fq 匹配的文档 ID 的联合或交集。但是,更复杂的 fq(特别是在使用函数查询时)处理需要在某些时候加载的实际字段值,在这种情况下,为所涉及的字段启用 docValues 是值得的。一个字段既可以被索引也可以使用 docValues。
    【解决方案2】:

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

    来自Solr guide

    DocValues 是一种在内部记录字段值的方式 对于某些目的(例如排序和分面)有效,比 传统索引。

    为什么是 DocValues?

    Solr 构建索引的标准方式是使用倒排索引。 这种风格建立了一个在所有文档中找到的术语列表 索引,每个术语旁边是该术语的文档列表 出现在(以及该术语出现的次数) 文档)。这使得搜索速度非常快 - 因为用户按字词搜索, 拥有一个现成的术语到文档值列表可以进行查询过程 更快。

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

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

    【讨论】:

    • 倒排索引定义每个术语(令牌)的文档列表。所以对于分面来说,使用倒排索引来计算非常容易吗?那么 docvalues 如何在这里提供更好的优化
    猜你喜欢
    • 2014-12-17
    • 2021-08-06
    • 2017-07-29
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 2018-03-02
    • 1970-01-01
    相关资源
    最近更新 更多