簡體   English   中英

Elasticsearch - 以任何方式找出所有字段值為文本的文檔

[英]Elasticsearch - Any way to find out all the documents with field value as text

在 elasticsearch 集群中,我不小心將一些文本推送到理想情況下應該是數字的字段中。 后來,我修復了這個問題並推送了 Number 類型的值。 現在,我想修復它,以便所有舊值都可以替換為某個數字,我需要找出所有將此字段作為文本的文檔。

是否有任何 elasticsearch 查詢可用於獲取此信息?

我認為這可以通過使用嵌套aggregations來實現。

在頂層; 在子級別使用術語聚合來了解文本值; 使用top_hits聚合來獲取包含這些值的documents

例如:

GET example_index/_search
{
  "size": 0,
  "aggs": {
    "NAME": {
      "terms": {
        "field": "example_field.keyword",
        "size": 10
      },
      "aggs": {
        "documents": {
          "top_hits": {
            "size": 10
          }
        }
      }
    }
  }
}

這個查詢; 將返回字段的不同值以及子級別中的相關documents ,例如:

{
  "aggregations": {
    "NAME": {
      "doc_count_error_upper_bound": 0,
      "sum_other_doc_count": 0,
      "buckets": [
        {
          "key": "mistake",
          "doc_count": 2,
          "documents": {
            "hits": {
              "total": 2,
              "max_score": 1,
              "hits": [
                {
                  "_index": "example_index",
                  "_type": "example_index",
                  "_id": "2QoDoXEBOCkJkkpwq5P0",
                  "_score": 1,
                  "_source": {
                    "example_field": "mistake"
                  }
                },
                {
                  "_index": "example_index",
                  "_type": "example_index",
                  "_id": "qAoDoXEBOCkJkkpwq5T0",
                  "_score": 1,
                  "_source": {
                    "example_field": "mistake"
                  }
                }
              ]
            }
          }
        },
        {
          "key": "520",
          "doc_count": 2,
          "documents": {
            "hits": {
              "total": 1,
              "max_score": 1,
              "hits": [
                {
                  "_index": "example_index",
                  "_type": "example_index",
                  "_id": "5goDoXEBOCkJkkpwq5P0",
                  "_score": 1,
                  "_source": {
                    "example_field": "1"
                  }
                }
              ]
            }
          }
        }
      ]
    }
  }
}

我上面的例子; 我們需要刪除mistake值的documents ,您可以簡單地通過 id 刪除它們。

注意:如果您有一個大索引,最好在您的代碼中編寫一個 function 來構建聚合,獲取響應,過濾值(如果可以解析為數字),然后按 id 刪除文檔。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM