Elasticsearch 过滤布尔查询

Elasticsearch Filtered Bool Query

我 运行 遇到了自定义搜索的一些严重问题。我想要的只是三个字段中的通配符搜索,结果应该由另一个字段过滤。在 Elastica 中,它会导致此查询:

{
   "bool":{
      "should":[
         {
            "wildcard":{
               "ean":"*180g*"
            }
         },
         {
            "wildcard":{
               "titel":"*180g*"
            }
         },
         {
            "wildcard":{
               "interpret":"*180g*"
            }
         }
      ],
      "filter":[
         {
            "term":{
               "genre":{
                  "value":"Rock",
                  "boost":1
               }
            }
         }
      ]
   }
}

实际上我找不到错误,但 Elasticsearch 没有给我过滤结果。发生什么了? Elasticsearch returns 所有具有过滤词的项目,无论布尔值是真还是假。当我将过滤器添加为 "Must" 时,我得到了相同的结果吗?这里有什么问题!?

您需要在 bool 查询中添加 "minimum_should_match": 1

{
   "bool":{
      "minimum_should_match": 1,
      "should":[
         {
            "wildcard":{
               "ean":"*180g*"
            }
         },
         {
            "wildcard":{
               "titel":"*180g*"
            }
         },
         {
            "wildcard":{
               "interpret":"*180g*"
            }
         }
      ],
      "filter":[
         {
            "term":{
               "genre":{
                  "value":"Rock",
                  "boost":1
               }
            }
         }
      ]
   }
}