基于聚合结果的Elasticsearch部分更新

时间:2019-06-25 20:34:36

标签: elasticsearch

我想根据聚合结果部分更新所有对象。

这是我的对象:

{
    "name": "name",
    "identificationHash": "aslkdakldjka",
    "isDupe": false,
    ...
}

我的目标是将存在“ identificationHash”两次以上的所有文档的isDupe设置为“ true”。

当前我正在做的是

  1. 我获得了所有“ isDupe” = false的文档,并在“ identificationHash”上进行了术语汇总,min_doc_count为2。
{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "isDupe": {
              "value": false,
              "boost": 1
            }
          }
        }
      ]
    }
  },
  "aggregations": {
    "identificationHashCount": {
      "terms": {
        "field": "identificationHash",
        "size": 10000,
        "min_doc_count": 2
      }
    }
  }
}
  1. 对于聚合结果,我使用一个脚本进行了批量更新,其中对与我的聚合结果匹配的所有identificationHash使用“ ctx._source.isDupe = true”。

重复步骤1和2,直到聚合查询不再有结果为止。

我的问题是:有更好的解决方案吗?我可以用一个脚本查询做同样的事情而无需循环处理1000个标识哈希吗?

0 个答案:

没有答案