2015-10-05 9 views
20

非常にばかげた質問ですが、elasticsearch内の文書のフィールドが存在するかどうかを確認する最良の方法は何ですか?私はドキュメントで何も見つけることができません。フィールドがElasticsearch文書に存在するかどうかを確認する最善の方法

たとえば、この文書にフィールド/キー「価格」がない場合、私は結果に戻したくありません。

{ は、 "更新": "2015年9月17日11時27分27秒"、 "名前": "アイシャドウ"、 "フォーマット": "1.5グラム/ 0.05オンス"、 }

私は何ができますか?あなたはまた、bool/must_not filterと組み合わせるmissing filterを使用することができます

{ 
    "query": { 
    "filtered": { 
     "filter": { 
     "bool": { 
      "must": [ 
      { 
       "exists": { 
       "field": "price" 
       } 
      }, 
      ...  <-- your other constraints, if any 
      ] 
     } 
     } 
    } 
    } 
} 

:あなたが使用することができます

{ 
    "query": { 
    "filtered": { 
     "filter": { 
     "bool": { 
      "must_not": [ 
      { 
       "missing": { 
       "field": "price" 
       } 
      } 
      ] 
     } 
     } 
    } 
    } 
} 

答えて

30

フィルタ:

その作用は同じであるがの

よろしく、アラン

+0

のために行く。しかし存在することができますようにされていませんSQLのNULL IS? 「フィールド」をチェックしない場合は、フィールドの値をチェックします。おそらく、私はドキュメントを理解できなかったでしょう。 @Val –

+0

ドキュメントに 'price'フィールドがない場合、' price'フィールドもないので、 'price'フィールドのないドキュメントはマッチしません。 – Val

+0

@EkaitzHernandezTroyasこれを試すことができましたか?運が良ければ? – Val

7

existsフィルタは、ES 2.1からexistsクエリにより置換されています。また、不足しているフィルタが削除され、不足しているクエリが廃止されました。

特定のフィールドを持っているすべてのドキュメント、

"bool": { 
    "must": { 
     "exists": { 
      "field": "my_field" 
     } 
    } 
} 

を取得するために、特定のフィールドを持っていないすべてのドキュメントを取得するには、must_not

"bool": { 
    "must_not": { 
     "exists": { 
      "field": "my_field" 
     } 
    } 
} 

このような弾性ドキュメントでそれを使用します。 https://www.elastic.co/guide/en/elasticsearch/reference/2.3/query-dsl-missing-query.html

+0

は1で動作します。xでも? – danatcofo

関連する問題