【问题标题】:Solr: Update existing documents onlySolr:仅更新现有文档
【发布时间】:2014-07-03 17:48:43
【问题描述】:

我正在尝试仅更新 Solr 4 中的现有文档。

假设我有这些文件:

  • {id: 1, name:"product 1", price:10}
  • {id: 2, name:"product 2", price:15}
  • {id: 3, name:"product 3", price:20}

然后我想添加一个字段,但仅适用于现有文档。所以我将这些文件发送给 Solr:

  • {id: 2, special:true}
  • {id: 3, special:true}
  • {id: 7, special:true}

我想要的结果索引文档是:

  • {id: 1, name:"product 1", price:10}
  • {id: 2, name:"product 2", price:15, special:true}
  • {id: 3, name:"product 3", price:20, special:true}

为了实现这一点,我使用了 _version_ 字段(用于原子更新,它已经可以正常工作了,顺便说一句),所以我的更新文档如下所示:

  • {id: 2, special:true, _version_:1}
  • {id: 3, special:true, _version_:1}
  • {id: 7, special:true, _version_:1}

使用它我希望只更新 ids 2 和 3,但我从 Solr 获得了 409 状态代码并且没有任何文档得到更新,因为我在添加所有文档后提交了索引。

如果我使用 version=0,那么我会得到这样的结果:

  • {id: 1, name:"product 1", price:10}
  • {id: 2, name:"product 2", price:15, special:true}
  • {id: 3, name:"product 3", price:20, special:true}
  • {id: 7, special:true, _version_:1}

有什么想法吗?

【问题讨论】:

    标签: solr


    【解决方案1】:

    您使用 version:1 的解决方案是正确的。但请注意,如果您批量发送原子更新,那么任何失败都会导致批处理中的后续更新被丢弃。

    在您给出的示例中,id:7 将导致 409 状态码(版本冲突),但应更新 id:2 和 id:3 的文档。

    【讨论】:

    • 如果我发送一个批次,Solr 会拒绝所有文档。如果我一次发送每个文档,它适用于所有文档,直到第一个文档不存在。
    猜你喜欢
    • 2012-01-19
    • 2016-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-02
    • 2011-07-10
    相关资源
    最近更新 更多