solr 中的倒排索引和 docValues 有什么不同?

问题描述

在这里阅读了很多文章。我得出的结论是 index 用于搜索,而 docValue 用于排序、分面。我很困惑 index 和 docValue 是相同的数据结构还是相同的想法(存储列值以获取 doc id)?如果不一样,哪里不一样?

解决方法

倒排索引 ::

Inverted Index 是一个概念,用于构建搜索库 Lucene。 Solr 构建索引的标准方式是使用倒排索引。 这种风格构建了在索引中的所有文档中找到的术语列表,每个术语旁边是该术语出现的文档列表(以及该术语在该文档中出现的次数)。这使得搜索速度非常快——因为用户是按词搜索的,拥有一个准备好的词到文档值列表可以使查询过程更快。 这就像通过扫描书后的索引来检索书中与关键字相关的页面, 而不是搜索书的每一页的每一个字。 这种类型的索引称为倒排索引,因为它将以页面为中心的数据结构(page->words)反转为以关键字为中心的数据结构(word->pages)。 Solr 将此索引存储在数据目录中名为 index 的目录中。

文档值 ::

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

在 Lucene 4.0 中,引入了一种新方法。 DocValue 字段现在是面向列的字段,具有在索引时构建的文档到值映射。这种方法有望减轻 fieldCache 的一些内存需求,并使对分面、排序和分组的查找速度更快。

对于 docValues,您只需要为您将使用它的字段启用它。 与所有模式设计一样,您需要定义一个字段类型,然后在启用 docValues 的情况下定义该类型的字段。为 docValues 启用字段只需要向该字段添加 docValues="true"。 DocValues 仅适用于特定的字段类型。

<field name="category" type="string" indexed="false" stored="false" docValues="true" />