2

条件の 1 つ (たとえば、should セクション) が何かの否定である bool クエリを使用したいと思います。

具体的には:

1) フィールドが存在しません。たとえば、次のクエリを試しました。

{"query":{
            "bool":{
                    "must":[
                            {"match":{"field1":"val1"}},
                            ],
                    "should":[
                                {"match":{"field2":"val2"}},
                                {"filtered" : 
                                            {
                                             "query" : {"match_all" : {}},
                                             "filter" : {"missing" : { "field":"field3"}}
                                             }
                                 },
                                ],
                    "minimum_number_should_match":1
                    }
         }
}

2) フィールドに値がありません。例えば:

{"query":{
            "bool":{
                    "must":[
                            {"match":{"field1":"val1"}},
                            ],
                    "should":[
                                {"match":{"field2":"val2"}},
                                {"filtered" : 
                                            {
                                             "query" : {"match_all" : {}},
                                             "filter" : {"not" : { "field3":"val3"}}
                                             }
                                 },
                                ],
                    "minimum_number_should_match":1
                    }
         }
}

どちらも機能しません。フィルターを適用しているか、内部クエリを間違って挿入しているに違いありません。どうすればこれを達成できますか?

4

2 に答える 2

1

ブールクエリの外部では、欠落しているフィルターではなく、フィルターを正常に使用しただけです。

例えば:

"filtered_query":{
  "query":{
    "bool":{ ... }
  },
  {"filter": {
    "missing":{ ... }
  }
} 

スコアリングが必要だと明示的には言いませんが、その条件でスコアリングを取得することはありません (結果が「フィルター処理されたかどうか」だけです)。

存在しないフィールドや値を持たないフィールドをチェックできるため、指定された両方の要件について欠落しているフィルターのドキュメントを参照することをお勧めします。not関数が 2 番目の例で期待していることを実行しているとは思いません。参考: http://www.elasticsearch.org/guide/reference/query-dsl/missing-filter/

"missing" : { 
     "field" : "user",
     "existence" : true,
     "null_value" : true
}

不足しているフィールドを一致させるか ("existence": true)、または空/null 値を一致させるか ("null_value": true) を示すために、existence および null_value 属性を適切に使用してください。

于 2013-04-26T14:24:35.780 に答える