在 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"/>
这样做的示例用例是什么?
这是否意味着它不可查询且未在响应中返回?
在这种情况下要理解的是,设置"docValues=true"旨在替代"index=true":仍然使字段“可查询”但在面向列(非倒排)索引中。
[...] 一种在内部记录字段值的方法,对于某些目的,例如排序和分面,比传统索引更有效。
实际上能够在 sort/facet-dedicated-field 中进行原子更新是一个示例用例!
请记住,即使设置为 docValues 启用的字段仍然可以获取 "stored=false",例如允许使用fl参数检索值。那是因为 docValues 以某种方式“总是”存储,如何取决于docValuesFormat默认为“Memory”(意味着 doc 值存储在堆中)。
DocValues 字段也依赖于useDocValuesAsStored默认为 true,这意味着该字段的行为就像它被定义为stored="true"即使定义为stored="false".