在 Apache Solr 9.0.0 中执行部分更新时出现以下错误
[doc=null] missing required field: id
即使在提供也是唯一字段的 id 字段之后也会发生这种情况。
在调查时我们发现这个错误的发生是因为模式中的动态字段定义如下
<dynamicField name="*" type="text_general" indexed="false" stored="false" multiValued="false" docValues="false"/>
如果我们将 dynamicField 名称更改为具有后缀,那么它就可以正常工作,例如
name="*_i"
但是在不改变 dynamicField 定义的情况下,有没有办法使部分原子更新工作?
更新 在 Solr 中找到导致此问题的提交 - https://github.com/apache/solr/commit/5a9a34daedb34cb5fc5dc6f8c5c40a734bb7dacb?diff=split 错误在 JsonLoader 中。它在 Solr 9.0.0 中引入
解决方法是以 xml 格式而不是 JSON 格式发送原子部分更新 -
<add>
<doc>
<field name="id">1011</field>
<field name="CLIENT_TEAM" update="set">New Delhi</field>
</doc>
<doc>
<field name="id">1022</field>
<field name="CLIENT_TEAM" update="set">Mumbai</field>
</doc>
</add>