当前位置: 首页 > 知识库问答 >
问题:

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

章哲茂
2023-03-14

在 Elasticsearch 中,我想用两个与 OR 聚合的不同子句来过滤我的结果,例如,返回属性 A= 真或属性 B= true 的文档。

我一直在尝试使用布尔查询来实现这一点。我的基本查询只是must中的文本搜索。如果我将这两个子句放在filter出现类型中,它会用AND聚合它们。如果我将这两个子句放在should出现类型中,并将minimum_should_match1设置为1,那么我得到了正确的结果。但是,匹配这两个条件的文档得分较高,因为“应该”在查询上下文中运行。

如何过滤为仅匹配两个条件之一的文档,而不增加匹配两个条件的文档的分数?

提前谢谢

共有1个答案

隗新霁
2023-03-14

您需要利用< code>constant_score查询,这样一切都在过滤器上下文中运行:

{
  "query": {
    "constant_score": {
      "filter": {
        "bool": {
          "minimum_should_match": 1,
          "should": [
            {
              "term": {
                "PropertyA": true
              }
            },
            {
              "term": {
                "PropertyB": true
              }
            }
          ]
        }
      }
    }
  }
}
 类似资料:
  • 我正在处理一个简单的Docker映像,其中包含大量环境变量。你能像docker-compose一样导入环境变量文件吗?我在docker文件留档中找不到任何相关信息。 Dockerfile 我想重新表述这个问题的一个好方法是:如何在Dockerfile中高效地加载多个环境变量?如果无法加载文件,则无法将docker文件提交到GitHub。

  • 问题内容: 我正在尝试将JSON数组拆分为多个事件。这是一个示例输入: 这是我的过滤器和输出配置: 这将产生2个事件,数组中的每个JSON都有一个。它接近我要寻找的东西: 问题是嵌套的“结果”部分。“结果”是目标参数的默认值。有没有一种方法可以使用拆分过滤器而不产生嵌套的JSON,并得到如下所示的结果: 目的是将其提供给ElasticSearch输出,每个事件都是带有document_id =>“

  • (Java版本8) 我需要在过滤器中处理请求正文。使用下面的代码,我读取了正文。 问题是如果请求正文发布的参数的内容类型为“Application/x-www-form-urlencoded”,那么这些参数在读取正文后将不可用。如果我不读取正文,它们可以使用request.getParameter()获取。 此外,我尝试使用以下代码包装请求并提供正文,这样解决方案的其余部分(例如servlet)就

  • 问题内容: 我希望能够以不同于web.xml的方式修改/配置过滤器。这是2个过滤器的静态配置。我希望能够静态配置一个过滤器,并允许该过滤器加载其他过滤器。我只是想知道是否有人知道lib已有此功能。 使用Servlet API 2.5 我已经在Guice的GuiceFilter中完成了此操作,其中在运行时配置了过滤器。 问题答案: 只需执行与容器已完成的相同的工作即可。即,按照servlet过滤器所

  • 问题内容: 当前,当我发出此SQL时,它将获得不同的用户名。 我有一些不同的用户名,它们代表组,例如。 我想将所有其他用户名(恰好是数字)分组为一个组,例如 我可以实现以下目标吗? 编辑:从答案修改的查询 问题答案: @bfavaretto很好(对他+1),但是如果您不了解前缀或前缀不同,则可以使用类似以下内容的方法:

  • 我正在开发一个项目,由于DevOps的更改,突然需要重新连接到远程(使用新的URL)。我需要采取哪些步骤来移除旧的遥控器并与新的遥控器建立连接,而不会破坏未合并的分支? 我已尝试使用以下方法更新远程URL: 但在从主服务器获取时出现此错误: 我错过什么了吗? 作为背景,我以前使用的codecommitrepo已经更改为需要联邦访问。所以我想使用git remote codecommit(GRC)和