【问题标题】:Solr thinks an update is an add operationSolr 认为更新是添加操作
【发布时间】:2016-02-26 19:07:33
【问题描述】:

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 中的一个错误

【问题讨论】:

    标签: java solr


    【解决方案1】:

    如果我没记错的话,更新请求总是以添加操作结束。与部分更新不同的是,Solr 最初是从索引中获取文档,然后根据请求参数覆盖字段,最后执行通常的文档索引。

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

    编辑:自从 Solr 引入 In-Place Updates 以来,这不再是真的。

    【讨论】:

    • 对于就地更新,则需要相反的内容 - 即该字段必须存储为 false。也必须是数字 docValues=true。这使得部分更新对于数字、计数器等非常有效,但对于其他字段(例如文本)很有用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-26
    • 2013-09-25
    • 1970-01-01
    • 2011-06-06
    • 1970-01-01
    相关资源
    最近更新 更多