3

当我将字段设置为 stored=false 并为其赋予默认值时,我遇到了 Solr (4.x) 的一个奇怪问题。为了清楚起见,我的架构类似于:

<field name="field1" type="tint" indexed="true" stored="true" />
<field name="field2" type="tint" indexed="true" stored="true" />
<field name="field3" type="tint" indexed="true" stored="true" />
<field name="field4" type="tint" indexed="true" stored="true" />
<field name="field5" type="tint" indexed="true" stored="false" default="0" />

默认情况下,每个文档的开头都有一个 field5=0。然后我更新文档,并为一些文档设置 field5=1。如果我更新了 field5=1 的文档,它们都会返回到 field5=0。但是当 field5 is stored=true 时,就没有问题了,它们永远不会回到默认值,尽管该字段没有更新......

任何解决方案来克服这个?我当然可以保持字段stored=true,但它会导致索引变大,因此由于开销而减慢搜索速度......

4

2 回答 2

4

在幕后,更新操作检索字段的存储值并重新索引整个新实体。因此,如果该字段未标记为已存储,则不能将其与原子更新一起使用。通常,未存储的字段会消失,与默认值的相互作用是不寻常的。

在索引设计的这个阶段,我不会担心性能,尤其是对于数字而言。您可以稍后使用各种优化,而瓶颈可能不在您期望的地方。

于 2013-10-10T01:04:39.890 回答
3

刚遇到同样的问题。SOLR 中的更新功能要求将所有字段存储为“TRUE”,因为 SOLR 使用存储的字段从中获取数据,然后使用此数据重建将被删除并再次索引的文档。

于 2014-01-13T06:19:26.437 回答