【问题标题】:Elasticsearch: Bulk update for nested objectElasticsearch:嵌套对象的批量更新
【发布时间】:2021-06-14 10:49:15
【问题描述】:

我的文档结构是这样的:

{
    "documentID": 123,
    "originalFilename": "Build a Better Post.pdf",
    "modDate": "2017-11-16T18:22:54.48",
    "documentType": "pdf",
    "keySystem": "web",
    "title": "Build a Better Post",
    "createPreview": false,
    "uploadedBy": "DA5208B3-2198-44C6-8256-0AEBC4DD1588",
    "streamItemData": {
        "itemID": 800,
        "author": {
            "employeeID": 9,
            "authorName": {
                "firstName": "Joseph",
                "preferredName": "Joe",
                "lastName": "Smith"
            },
            "title": "manager"
        }
    }
}

我的 elasticsearch 中有大约数百万个文档。一个 author 对象可以存在于数千个文档中,基本上存在一对多的关系。

每当更新嵌套对象 author 时,比如说标题已更新,我想更新我所有包含此 author 的文档,这可能是数百万个文档。是否有任何弹性搜索查询可以实现这一目标。我知道应该有一个批量更新过程来处理这个问题,但是有没有什么方法可以让我不必查询包含这个对象的所有文档然后一个一个地更新它们。

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    _update_by_query endpoint 是您正在寻找的。​​p>

    下面的命令会用employeeID: 9为作者识别所有文档(你可以有任何你想要的条件),然后它将author字段替换为脚本参数中的字段:

    POST your-index/_update_by_query?wait_for_completion=false&slices=auto&conflicts=proceed
    {
      "script": {
        "source": "ctx._source.streamItemData.author.putAll(params)",
        "lang": "painless",
        "params": {
            "authorName": {
                "firstName": "Joseph",
                "preferredName": "Joe",
                "lastName": "Smith"
            },
            "title": "manager"
        }
      },
      "query": {
        "term": {
          "streamItemData.author.employeeID": "9"
        }
      }
    }
    

    由于您可能愿意更新数百万个文档,我已将wait_for_completion=false 添加到 URL 中,以便更新异步运行。您可以在任务运行时使用Task management API

    检查任务

    【讨论】:

    • 目前还没有,我正在检查如何处理版本冲突失败,我看到有可用于更新 API 的重试冲突,但找不到任何可通过查询 api 更新的内容。我相信在这种情况下,应用程序将不得不处理失败。
    • 当然,处理好了,在网址加&conflicts=proceed,我已经更新了答案
    猜你喜欢
    • 2021-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多