2015-07-21 25 views
0

當我使用批量API更新嵌套文檔時,意外創建了一個字段。現在,我的文檔具有嵌套的文檔和具有相同結構的字段名稱。例如,結構類似於以下內容:當嵌套的文檔具有相同的結構時,搜索/刪除ElasticSearch中的句點字段

{ 
    "foo":{ 
    "bar": 123 
    }, 
    "foo.bar": 123 
} 

當我對我的索引執行查詢時,這會造成問題。我怎樣才能找到具有頂級字段「foo.bar」的文檔並刪除它們?

回答

1

您可以在partial update call這樣使用腳本實現這一點:

curl -XPOST http://localhost:9200/myindex/mytype/123/_update -d '{ 
    "script" : "ctx._source.remove(\"foo.bar\")" 
}' 

UPDATE:如果您需要刪除字段包含它的所有文件,有使用update-by-query plugin另一種解決方案。在一次拍攝中,您可以指定要更新哪些文檔以及在匹配文檔中要更新的內容,如下所示:

curl -XPOST localhost:9200/myindex/_update_by_query -d '{ 
    "query" : { 
     "filtered" : { 
      "filter" : { 
       "exists": {"field": "foo.bar"} 
      } 
     } 
    }, 
    "script" : "ctx._source.remove(\"foo.bar\")" 
}' 
+0

您是否碰巧知道如何搜索這些文檔? – WindsurferOak

+0

我已經更新了我的答案。 – Val

+0

我能夠使用您之前編寫的腳本刪除字段。我沒有使用update-by-query插件,因爲ES 1.6似乎有問題,https://github.com/yakaz/elasticsearch-action-updatebyquery/issues/38。總而言之,感謝您的幫助! – WindsurferOak

相關問題