在 SOLR 中,为什么字段是非存储和非索引的?

d-_*_*_-b 4 lucene solr

在 Solr 关于原子更新的文档中,他们提到一个字段应该是非索引和非存储的。

https://lucene.apache.org/solr/guide/7_6/updating-parts-of-documents.html#in-place-update-example

只有当需要更新的字段满足这三个条件时,才会使用这种方式进行原子更新操作:

是非索引 (indexed="false")、非存储 (stored="false")、单值 (multiValued="false") 数字 docValues (docValues="true") 字段;

<field name="price" type="float" indexed="false" stored="false" docValues="true"/>

这样做的示例用例是什么?

这是否意味着它不可查询且未在响应中返回?

Eri*_*ult 6

在这种情况下要理解的是,设置"docValues=true"旨在替代"index=true":仍然使字段“可查询”但在面向列(非倒排)索引中。

[...] 一种在内部记录字段值的方法,对于某些目的,例如排序和分面,比传统索引更有效。

实际上能够在 sort/facet-dedicated-field 中进行原子更新一个示例用例!

请记住,即使设置为 docValues 启用的字段仍然可以获取 "stored=false",例如允许使用fl参数检索值。那是因为 docValues 以某种方式“总是”存储,如何取决于docValuesFormat默认为“Memory”(意味着 doc 值存储在堆中)。

DocValues 字段也依赖于useDocValuesAsStored默认为 true,这意味着该字段的行为就像它被定义为stored="true"即使定义为stored="false".