2017-08-18 14 views
-1

私は2.3.1をElasticsearchするには、以下のクエリを持っている:elasticsearchでandとorとfilterの順序が重要なのはなぜですか?

{ 
    "query": { 
     "bool": { 
      "must": { 
        "query": { 
         "multi_match": { 
          "query": "my search", 
          "type": "cross_fields", 
          "fields": ["field1^6", "field2", "field3^2", "field4"], 
          "operator": "and", 
          "zero_terms_query": "all" 
         } 
        } 
       } 
      }, 
      "filter": { 
       "or": [{ 
        "term": { 
         "pickup": true 
        } 
       }, { 
        "term": { 
         "local_delivery": true 
        } 
       }], 
       "and": [{ 
        "term": { 
         "field5": true 
        } 
       }, { 
        "term": { 
         "field6": "my_value" 
        } 
       }] 
      } 
     } 
    } 
} 

このクエリは、11Kの結果を返します。 orとandの順序を次のように切り替えると:

{ 
    "query": { 
     "bool": { 
      "must": { 
        "query": { 
         "multi_match": { 
          "query": "my search", 
          "type": "cross_fields", 
          "fields": ["field1^6", "field2", "field3^2", "field4"], 
          "operator": "and", 
          "zero_terms_query": "all" 
         } 
        } 
       } 
      }, 
      "filter": { 
       "and": [{ 
        "term": { 
         "field5": true 
        } 
       }, { 
        "term": { 
         "field6": "my_value" 
        } 
       }], 
       "or": [{ 
        "term": { 
         "pickup": true 
        } 
       }, { 
        "term": { 
         "local_delivery": true 
        } 
       }] 
      } 
     } 
    } 
} 

私は突然675の結果しか持っていません。

これらのクエリはまったく同じではありませんか?本質的には、field5をtrue、field6をmy_valueにするようにクエリをフィルタリングしたい。しかし、私はまたそう、ピックアップやlocal_deliveryのいずれかに該当することにしたい:ブールクエリを使用して

(field5 == true && field6 == "my_value" || (pickup == true || local_delivery == true)) 

答えて

1

は、この問題が修正されています。

"filter": { 
    "bool": { 
     "should": [{ 
      "term": { 
       "pickup": true 
      } 
     }, { 
      "term": { 
       "local_delivery": true 
      } 
     }], 
     "must": [{ 
      "term": { 
       "field5": true 
      } 
     }, { 
      "term": { 
       "field6": "my_value" 
      } 
     }] 
    } 
} 
関連する問題