Java Solr-如果存储为false,则具有默认值的字段将自行重置

Java Solr-如果存储为false,则具有默认值的字段将自行重置,java,solr,configuration,Java,Solr,Configuration,当我将一个字段设置为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" inde

当我将一个字段设置为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" />

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


有什么解决办法吗?我可以保留字段stored=true,当然,但这样会导致索引变大,从而由于开销而减慢搜索速度

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


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

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

因此,最好将所有存储的字段设置为true。。我将其中一些更改为false,因为我不需要检索它们来向最终用户显示,但是对于这个问题,将它们保留为false没有任何意义。。。所以,如果字段有默认值,使用原子更新存储选项会变成某种bug?有些烦人,你不需要向用户显示所有字段。这有一些参数(fl)。您还可以启用延迟加载,以避免甚至正常地将它们加载到内存中。你有一些优化选项,如果你看的话。原子更新在底层Lucene体系结构中很难实现,而且这种实现是当前快速搜索的折衷方案。这就是为什么你看到你所看到的。