当我将字段设置为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存储= true时,那么没有问题,它们永远不会回到默认值,尽管该字段没有更新......
解决这个问题的任何解决办法?我可以保持字段存储=当然然后它会导致索引变大,从而因为开销而减慢搜索速度......
答案 0 :(得分:4)
在幕后,更新操作会检索字段的存储值并重新索引整个新实体。因此,如果字段未标记为已存储,则不能将其与原子更新一起使用。通常,未存储的字段会消失,与默认值的相互作用是不常见的。
我不担心索引设计的这个阶段的性能,特别是如果它是数字。您可以在以后使用各种优化,瓶颈可能不在您预期的位置。
答案 1 :(得分:3)
刚遇到同样的问题。 SOLR中的更新功能要求所有字段都存储为“TRUE”,因为SOLR使用存储的字段从中获取数据,然后使用此数据重建将被删除并再次编入索引的文档。