在ElasticSearch中组合过滤器

时间:2017-05-08 05:23:32

标签: elasticsearch filter

这是我想要转换为 elasticsearch 查询的基本 SQL查询

SELECT product
FROM   products
WHERE  (price = 200 OR ID = "101")
  AND  (price != 300)

这是我尝试过的 中的查询:

GET /my_store/my_product_items/_search

{
   "query" : {
      "constant_score" : { 
         "filter" : {
            "bool" : {
              "must" : [
                 { "term" : {"price" : 200}}, 
                 { "term" : {"productID" : "101"}} 
              ],
              "must_not" : {
                 "term" : {"price" : 300} 
              }
           }
         }
      }
   }
}

但它没有提供与SQL查询相同的输出。做支持。

TIA。 :)

1 个答案:

答案 0 :(得分:2)

良好的开端!您只需要使用must更改should,就可以了:

GET /my_store/my_product_items/_search

{
   "query" : {
      "constant_score" : { 
         "filter" : {
            "bool" : {
              "minimum_should_match": 1,         <--- add this
              "should" : [                       <--- change this
                 { "term" : {"price" : 200}}, 
                 { "term" : {"productID" : "101"}} 
              ],
              "must_not" : {
                 "term" : {"price" : 300} 
              }
           }
         }
      }
   }
}