Elasticsearch 过滤布尔查询

Posted

技术标签:

【中文标题】Elasticsearch 过滤布尔查询【英文标题】:Elasticsearch Filtered Bool Query 【发布时间】:2017-09-29 11:27:36 【问题描述】:

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


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

实际上我找不到错误,但 Elasticsearch 没有给我过滤结果。发生什么了? Elasticsearch 返回所有带有过滤词的项目,如果布尔应该是 True 或 False。当我将过滤器添加为“必须”时,我得到了相同的结果吗?这里有什么问题!?

【问题讨论】:

您应该在 bool 查询中添加 "minimum_should_match": 1 就是这样!非常感谢! 【参考方案1】:

您需要在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
               
            
         
      ]
   

【讨论】:

以上是关于Elasticsearch 过滤布尔查询的主要内容,如果未能解决你的问题,请参考以下文章

Elastic Search之布尔查询

Elasticsearch (DSL 布尔查询 过滤器 排序 高亮显示

Elasticsearch 查询与过滤

ElasticSearch 常用的查询过滤语句

Elasticsearch--集群&吞吐量

Elasticsearch查询类型