curl 'http://localhost/solr/collection/update?commit=true'
-H 'Content-type:application/json'
-d
'[
{
"id":"11111",
"price":{"set":1000}
}
]'
如果存在id:11111,则更新价格值。 没关系。
如果id:11111不存在,则在solr索引中创建新文档。这种行为是不可取的。我希望错误的一些文字如下:你试图更新的文件不存在。 我无法理解什么是错的。
Solr版本:4.8.0。
schema.xml的一部分:
<field name="id" type="string" indexed="true" stored="true" required="true"/>
<uniqueKey>id</uniqueKey>
答案 0 :(得分:0)
这就是原子更新的当前实现似乎如何工作。我同意可能需要出错...你应该在用户邮件列表中提出问题,看看委员会的想法,也许他们同意你应该提出错误,他们会要求你然后打开一个jira。
哦,刚刚注意到4.8版本,这是相当陈旧的,您是否有机会测试当前版本中的行为?
答案 1 :(得分:0)
/update
请求处理程序实际上更新了新文档和现有文档的索引,并处理了删除操作。
在指数化期间:
换句话说,更新请求 - 如果不是删除 - 总是在同一添加操作中结束。顺便说一句,solr.UpdateRequestHandler
识别的XML架构包含 <add>
,<doc>
和<field>
元素,无论操作(添加或替换)如何。
最新版本的Solr提供了更多文档更新选项。 (请参阅atomic updates和in-place updates。
您描述的是预期的行为。由于id
字段是必需的,因此Solr将为缺少此字段的文档抛出错误。在您的情况下,文档在两种情况下都被编入索引,因为在两种情况下都会给出id。
使用此配置,您必须确保id
字段对于您认为是新文档的内容为空,无论是客户端在准备请求时还是服务器端使用更新处理器,或者更新请求处理程序实现。也许阻止任何新文档的索引会更简单吗?