微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在elasticsearch查询中对具有不同值的同一字段应用OR过滤器

如何解决如何在elasticsearch查询中对具有不同值的同一字段应用OR过滤器

我希望在具有不同值的同一字段上添加过滤器。 基本上我想获取带有 mode1 或 mode2 类型过滤器的文档。以下查询有问题。

 {
   "index": "abcdef*","from": 0,"size": 50,"body": {
   "query": {
     "bool": {
         "must": [{ "term": { "id": "123455" } }],"filter": [{ "term": { "mode": "mode1" } },{ "term": { "mode": "mode2" } }]
     }
   } 
  }
 }

解决方法

您需要将 bool/should 子句与 filter 子句一起使用

 {
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "id": "123455"
          }
        }
      ],"filter": [
        {
          "bool": {
            "should": [
              {
                "term": {
                  "mode": "mode1"
                }
              },{
                "term": {
                  "mode": "mode2"
                }
              }
            ]
          }
        }
      ]
    }
  }
}
,

您可以尝试使用嵌套的 bool 查询并应用类似于 OR 查询的 should 子句。

ItemIdentifierType
,

最好将 bool/should 移到顶层并使用 bool/filter 而不是 bool/must 作为词条查询(因为您不需要相关性,只需回答是/否即可id 字段上的约束):

{
  "query": {
    "bool": {
      "minimum_should_match": 1,"should": [
        {
          "term": {
            "mode": "mode1"
          }
        },{
          "term": {
            "mode": "mode2"
          }
        }
      ],"filter": [
        {
          "term": {
            "id": "123455"
          }
        }
      ]
    }
  }
}

或者甚至更好,只需利用 terms 查询,它使查询变得尽可能简单:

{
  "query": {
    "bool": {
      "filter": [
        {
          "term": {
            "id": "123455"
          }
        },{
          "terms": {
            "mode": ["mode1","mode2"]
          }
        }
      ]
    }
  }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?