2016-07-28 11 views
5

でmust_notを組み合わせる:私は現在、現在、次のように見えるElastSearchクエリに苦しんだElasticSearchクエリ

... 
"query": { 
    "bool": { 
     "must_not": [ 
      { 
       "term": { 
        "bool-facet.criteria1": { 
         "value": false 
        } 
       } 
      }, 
      { 
       "term": { 
        "bool-facet.criteria2": { 
         "value": false 
        } 
       } 
      } 
     ] 
    } 
} 
... 

だから今criteria1 OR criteria2いずれかの一致、文書は無視されます。 criteria1 AND criteria2に一致する文書だけが無視されるように、クエリをどのように表示する必要がありますか?

答えて

1

elasticsearchのバージョンを更新できなかったため、私は別の解決策を見つけなければなりませんでした。これは私のために働いていたものです:

"query": { 
    "bool": { 
     "must": [ 
      { 
       "bool":{ 
        "must_not":{ 
         "term":{ 
          "bool-facet.criteria1": false 
         } 
        } 
       } 
      }, 
      { 
       "bool":{ 
        "must_not":{ 
         "term":{ 
          "bool-facet.criteria2": true 
         } 
        } 
       } 
      } 
     ] 
    } 
} 

他の回答

は、他のバージョンの正しいされている可能性がありますが、しませんでした:

"query": { 
    "bool": { 
     "must_not" : [ 
      { 
       "query": { 
        "bool": { 
         "must": [ 
          { 
           "term": { 
           "bool-facet.criteria1": false 
           } 
          }, 
          { 
           "term": { 
           "bool-facet.criteria2": false 
           } 
          } 
         ] 
        } 
       } 
      } 
     ] 
    } 
} 
+0

に送信する必要があります。バージョン5.5.1では、次の理由で解析エラーが発生します。 [クエリ]が[クエリ]に登録されていません " – Mnebuerquo

+0

私は 'must_not'の内部にもう一度 'クエリ'を書く必要はないと信じています。内側の 'must'節は 'must_not'の下に直接書くことができます。その良い練習かどうか分からない。 編集:aahh ..既に下記の回答に記載されています。 – manoj

3

あなたはそれの内側に簡単なAND -behavior、そしてちょうど巣別boolクエリしたい場合:

"query": { 
    "bool": { 
    "must_not": [ 
     { 
     "bool": { 
      "filter": [ 
      { 
       "term": { 
       "bool-facet.criteria1": false 
       } 
      }, 
      { 
       "term": { 
       "bool-facet.criteria2": false 
       } 
      } 
      ] 
     } 
     } 
    ] 
    } 
} 

注意をそのfilterを使用して(それが不要得点ではい/いいえ質問ませんが、かのようにあなたが得点を得たい場合は、filterの代わりにmustを使用します)、希望するANDの動作が得られます。これは、「not(criteria1 == false AND criteria2 == falseを持つ文書)」に質問を変更します。

+0

この結果、私には次のエラーが発生します。 boolクエリは[フィルタ]をサポートしていません – kcm

+0

実行しているバージョンは何ですか? – pickypg

+0

1.4.5と思われます...それはそれ以降のバージョンで可能ですか? – kcm

2

以下の構成は、5.5.1に類似したクエリに私のために働きました5.5.1で私のために働いてください。

関連する問題