2017-08-28 40 views
0

如果將數據插入到不適合現有類型的字段,Elasticsearch默認會引發異常。例如,如果一個字段已被創建爲數字類型,那麼爲該字段插入一個字符串值的文檔會導致錯誤。在Elasticsearch中查找其中`ignore_malformed`被觸發的文檔

此行爲可以通過啓用然後ignore_malformed設置,這意味着這樣的字段被自動忽略用於索引目的而改變,但保留了_source文檔中 - 這意味着無效的值不能搜索或聚集,但仍包括在退回的文件。

這是我們用例中的優先行爲,但我們希望能夠以某種方式找到這些文檔,以便我們可以在將來修復它們。

有沒有辦法以某種方式標記一些格式不正確的字段被忽略的文檔?我們完全控制文檔插入過程,因此我們可以修改所有插入標誌,或者進行試用插入或任何其他操作來實現我們的目標。

回答

1

可以使用exists查詢來查找文檔,其中這個字段不存在,看這個例子

PUT foo 
{ 
    "mappings": { 
    "bar": { 
     "properties": { 
     "baz": { 
      "type": "integer", 
      "ignore_malformed": true 
     } 
     } 
    } 
    } 
} 

PUT foo/bar/1 
{ 
    "baz": "field" 
} 

GET foo/bar/_search 
{ 
    "query": { 
    "bool": { 
     "filter": { 
     "bool": { 
      "must_not": [ 
      { 
       "exists": { 
       "field": "baz" 
       } 
      } 
      ] 
     } 
     } 
    } 
    } 
} 

沒有專門的機構了,所以這個搜索還發現在現場沒有故意設置文件

+0

我很難區分具有該字段(但格式錯誤)的文檔與沒有該字段的文檔。我需要某種搜索來檢查該字段不存在索引,但存在於「_source」中。除此之外,問題是我有1000個不同的領域,找到任何有衝突的領域都會變得棘手。 – Nakedible