0

我正在尝试通过聚合从弹性搜索中删除记录,我正在使用的查询是这个

{
  "aggs": {
    "countfield": {
      "terms": {
        "field": "IaClaimChargeID",
        "size": 100,
        "order": {
          "_count": "desc"
        },
        "min_doc_count": 1
      },
      "aggs": {
        "text": {
          "top_hits": {
            "size": 1,
            "_source": {
              "includes": [
                "ChargeAmount"
              ]
            }
          }
        }
      }
    }
  }
}

现在我正在做的是删除 doc_count 大于 1 的所有文档。问题是大约有 100 万条记录,我无法在单个查询中获取所有记录。有没有解决方案,我可以给出分页大小就像从 1000 -5000 或者有没有更好的解决方案来实现这一点。

我正在做的是获取 doc_count,然后在 doc_count >1 处运行删除查询,以获取输出中的值。

这是输出

 "buckets" : [
        {
          "key" : "$455512-Apr-09", // deleting by this key
          "hits" : []
          doc_count" : 1,
          "text" : {
            "hits" : {
              "total" : 1,
              "max_score" : 1.0,
             }]
4

2 回答 2

0

Elasticsearch 有一个端点可以按特定条件删除记录,因此您可以使用 _delete_by_query端点来删除记录。

POST /put_your_index_name_goes_here/_delete_by_query
{
  "query": {
    "match": {
      "doc_count": 1
    }
  }
}

见参考。 https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-delete-by-query.html

于 2019-10-11T08:51:54.360 回答
0

您可以通过给出fromsize参数来像这样分页

 {
     "from" : 0, "size" : 10, 
      "aggs": {
        "countfield": {
          "terms": {
            "field": "IaClaimChargeID",
            "size": 100,
            "order": {
              "_count": "desc"
            },
            "min_doc_count": 1
          },
          "aggs": {
            "text": {
              "top_hits": {
                "size": 1,
                "_source": {
                  "includes": [
                    "ChargeAmount"
                  ]
                }
              }
            }
          }
        }
      }
    }

你可以看这里

此外,sizewith from 与您在聚合中给出的大小不同,聚合中的大小表示存储桶大​​小。而最大的大小是指文档的数量(其默认值为 10)

于 2019-10-16T13:58:18.477 回答