[英]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.