2016-12-27 10 views
0

以下を考慮してください。ストップフィールドはタイムスタンプフィールドです。ElasticSearch 5. *、問い合わせ先:フィールドが存在しないか、存在する値がこの値である必要がある場合

私は条件以下でデータをフィルタする:

  1. 停止フィールドが
  2. を存在しないか、停止フィールドの値は、私が知っている> =今

ありません、私はmust_notを使用していますが、できないはずです方法を見つけ出す。

私は子供のタイプについていくつかのスコアリングを行い、このスコアを使って親を並べ替え、次にストップフィールドを使用して親をフィルタリングします。フィールドが存在しないことをフィルタリングするために

"bool": 
     { "should":[ 
     { "range": 
      { "stop": 
       { "gte": "now" } 
      } 
     }, 
     { "query": 
      { "exists" : 
       { "field" : "stop" } 
      } 
      } 
] } 
+0

私は、以下のフィルタを使用しても望ましい結果を得ていますが、まだ何かを探しています。 "{bool"} {{"should_not":{{"存在する":{{" "field": "stop"}}}}}]} –

+1

あなたのコメントのクエリは、あなたが必要とするものとまったく同じです。 '' minimum_should_match ":1'を追加する必要もあります – Val

答えて

0

はフィルターを存在しています。クエリは次のようになります。

"query": { 
    "filtered": { 
     "filter": { 
     "bool": { 
      "must_not": [ 
      { 
       "exists": { 
       "field": "stop" <-- give the field which shouldn't exist 
       } 
      } 
      ] 
     } 
     } 
    } 
    } 

上記はサンプルを再現できるようにしたものです。 2番目の条件については、あなたがしたようにrangeクエリを使用しているようです。タイムスタンプを取得するより良い方法を保証することはほとんどできませんrange。それが役に立てば幸い!

0

あなたは何を使用している場合、must_notbool条件:あなたが使用する必要が

GET indexName/parentType/_search 
{ 
    "query": { 
    "bool": { 
     "must": [ 
     { 
      "has_child": { 
      "type": "child-type", 
      "score_mode": "max", 
      "query": { 
       "function_score": { 
       "functions": [ 
        { 
        "script_score": { 
         "script": { 
         "file": "score-analytics", 
         "lang": "expression" 
         } 
        } 
        } 
       ] 
       } 
      } 
      } 
     }, 
     { 
      "bool": { 
      "should": [ 
       { 
       "range": { 
        "stop": { 
        "gte": "now" 
        } 
       } 
       } 
      ] 
      } 
     } 
     ] 
    } 
    } 
} 
関連する問題