2017-08-28 24 views
0

Elasticsearchは、既存のタイプに適合しないフィールドにデータを挿入すると、デフォルトで例外をスローします。たとえば、フィールドが数値型として作成された場合、そのフィールドの文字列値を含むドキュメントを挿入するとエラーが発生します。Elasticsearchで `ignore_malformed`がトリガーされた文書を見つける

この動作は、ignore_malformedの設定を有効にすることで変更できます。つまり、このフィールドはインデックス作成の目的で黙って無視されますが、_source文書に保持されます。つまり、無効な値は検索または集計できません。返された文書。

これは、私たちのユースケースでは好ましい動作ですが、私たちは将来的にそれらを修正できるように、何らかの形でそのようなドキュメントを見つけることができるようにしたいと考えています。

不正なフィールドが無視されたドキュメントに何らかの理由でフラグを立てる方法はありますか?ドキュメントの挿入プロセスを完全に制御するので、すべての挿入フラグを変更するか、試用版などを使用して目標を達成することができます。

答えて

1

あなたはそこには、専用のメカニズムはいえませんので、この検索は、フィールドが意図的に設定されていないドキュメントを検索し

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" 
       } 
      } 
      ] 
     } 
     } 
    } 
    } 
} 

この例を参照して、このフィールドが存在しない文書を検索するためにexistsクエリを使用することができます

+0

フィールドを持っていないドキュメントからそのフィールド(ただし不正な形式)を持つドキュメントを区別することは非常に困難です。私はフィールドがインデックスとして存在しないことをチェックする何らかの検索が必要ですが、 "_source"に存在します。それに加えて、私は1000のフィールドがあり、競合するフィールドを見つけるのは難しいでしょう。 – Nakedible

関連する問題