首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Elasticsearch中,如何在不影响分数的情况下使用OR组合多个过滤器?

在Elasticsearch中,如何在不影响分数的情况下使用OR组合多个过滤器?
EN

Stack Overflow用户
提问于 2021-09-16 01:48:43
回答 1查看 31关注 0票数 0

在Elasticsearch中,我想用两个不同的子句来过滤我的结果,这些子句用OR聚合,例如用PropertyA=true或PropertyB=true返回文档。

我一直在尝试使用bool query来做这件事。我的基本查询只是must中的一个文本搜索。如果我将这两个子句都放在filter实例类型中,它会用AND将它们聚合在一起。如果我将这两个子句都放在should实例类型中,并将minimum_should_match设置为1,那么我就会得到正确的结果。但是,同时满足两个条件的文档会得到更高的分数,因为“应该”是在查询上下文中运行的。

如何筛选出只符合两个条件中的任何一个的文档,而不增加同时满足两个条件的文档的分数?

提前感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-16 03:46:37

您需要利用constant_score query,因此所有内容都在过滤器上下文中运行:

代码语言:javascript
复制
{
  "query": {
    "constant_score": {
      "filter": {
        "bool": {
          "minimum_should_match": 1,
          "should": [
            {
              "term": {
                "PropertyA": true
              }
            },
            {
              "term": {
                "PropertyB": true
              }
            }
          ]
        }
      }
    }
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69201499

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档