Solr认为更新是一项添加操作

时间:2016-02-26 19:07:33

标签: java solr

Solr版本是5.4.1

我把它发布到http://localhost:8983/solr/default-collection/update,它就像我添加整个文档一样对待它,而不是部分更新:

{
    "id": "0be0daa1-a6ee-46d0-ba05-717a9c6ae283",
    "tags": {
        "add": [ "news article" ]
    }
}

在日志中,我发现了这个:

2016-02-26 14:07:50.831 ERROR (qtp2096057945-17) [c:default-collection s:shard1_1 r:core_node21 x:default-collection] o.a.s.h.RequestHandlerBase org.apache.solr.common.SolrException: [doc=0be0daa1-a6ee-46d0-ba05-717a9c6ae283] missing required field: data_type
        at org.apache.solr.update.DocumentBuilder.toDocument(DocumentBuilder.java:198)
        at org.apache.solr.update.AddUpdateCommand.getLuceneDocument(AddUpdateCommand.java:83)
        at org.apache.solr.update.DirectUpdateHandler2.doNormalUpdate(DirectUpdateHandler2.java:273)
        at org.apache.solr.update.DirectUpdateHandler2.addDoc0(DirectUpdateHandler2.java:207)
        at org.apache.solr.update.DirectUpdateHandler2.addDoc(DirectUpdateHandler2.java:169)
        at org.apache.solr.update.processor.RunUpdateProcessor.processAdd(RunUpdateProcessorFactory.java:69)

这有什么意义吗?我在一两天前发送更新就好了,现在看起来像更新请求是一个全新的文档。

更新我选择的答案让我朝着正确的方向前进。我需要做的就是纠正它是加载所有必需字段的现有字段并自己将它们添加到有效负载中。然后它为我工作。它不是自动的,这表明它可能是Solr 5.4.1中的一个错误

1 个答案:

答案 0 :(得分:3)

如果我没错,更新请求总是会在添加操作中结束。与部分更新的区别在于Solr最初从索引中获取文档,然后根据请求参数覆盖字段,最后执行常规文档索引。

文档被拒绝,因为缺少必填字段data_type:它应该在schema.xml中定义为stored=true,或者每次发生部分更新时添加到部分文档字段。实际上同样适用于所有领域。

编辑:自从Solr引入In-Place Updates以来,这已不再适用。