【问题标题】:ElasticSearch bulk insert/update operationElasticSearch 批量插入/更新操作
【发布时间】:2017-03-30 04:26:58
【问题描述】:

我不确定在批量索引中是否正确使用了upsert 操作。

我的要求是:

{ "update": {"_id": "610946100"}}\n
{"doc": {"id":"610946100","uri":"/0/0/1/6/4/0/610946100.xml"}, "doc_as_upsert" : true}\n

网址是:http://localhost:9200/anIndex/aType/_bulk

我想我错过了documentation 中的某些内容,但我仍然找不到如何进行此操作。

我想要的是在索引中创建上述文档或更新它(如果存在)。

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    如果您通过批量 API 将记录添加到索引中

    { "create": {"_id": "someId"}}\n
    {"id":"someId","uri":"/0/1/3/2/1/0511912310/511912310.xml"}\n
    

    如果 id 已经存在于索引中,你会得到一个异常。 如果您想添加或替换一个文档(取决于它是否存在),您应该将请求作为

    { "index": {"_id": "someId"}}\n
    {"id":"someId","uri":"/0/1/3/2/1/0511912310/511912310.xml"}\n
    

    如果存在具有相同索引和类型的文档,则创建将失败 已经,而 index 将根据需要添加或替换文档

    https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html 5.3 版

    【讨论】:

      【解决方案2】:

      我看到您的请求和Bulk Documentation 之间唯一不同的是,这些示例具有在更新操作中定义的索引和类型。因此,基于此,我将尝试添加如下值。

      {"update": {"_id": "610946100", "_type": "aType", "_index": "anIndex"}}\n
      {"doc": {"uri":"/0/0/1/6/4/0/610946100.xml"}, "doc_as_upsert" : true}\n
      

      此外,由于您在更新命令中指定了文档_id,我会将其从部分文档中删除,或者将其标记为_id。 (你错过了下划线)

      【讨论】:

        猜你喜欢
        • 2022-08-10
        • 1970-01-01
        • 2016-03-15
        • 2017-05-17
        • 2012-02-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-03
        相关资源
        最近更新 更多