ES多条件查询

场景:想要查询出设备id 为 3 的所有设备上报信息,并且上报信息的开始时间或结束时间只要有一个满足 在 某个时间段里即可。

在 Elasticsearch 中,您可以使用布尔查询来实现同时满足条件1并且满足条件2或条件3中的一个的查询。具体来说,您可以使用"must"子句来指定满足条件1的查询,使用"should"子句来指定满足条件2或条件3中的一个的查询,并将它们组合起来。

以下是一个示例查询:

json 复制代码
GET /my_index/_search
{
  "query": {
    "bool": {
      "must": [
        { "term": { "deviceId": 3 } }
      ],
      "should": [
              {
                "range": {
                  "startTime": {
                    "gte": "2023-10-11T23:12:02+08:00",
                    "lte": "2023-10-11T23:12:02+08:00",
                    "time_zone": "+08:00"
                  }
                }
              },
              {
                "range": {
                  "endTime": {
                    "gte": "2023-10-11T23:12:02+08:00",
                    "lte": "2023-10-11T23:12:02+08:00",
                    "time_zone": "+08:00"
                  }
                }
              }
            ],
      "minimum_should_match": 1
    }
  }
}

"minimum_should_match"参数被设置为1,这意味着至少有一个"should"子句必须匹配才能返回结果。

还有另外一种写法:

json 复制代码
{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "deviceId": 3
          }
        },
        {
          "bool": {
            "should": [
              {
                "range": {
                  "startTime": {
                    "gte": "2023-10-11T23:12:02+08:00",
                    "lte": "2023-10-11T23:12:02+08:00",
                    "time_zone": "+08:00"
                  }
                }
              },
              {
                "range": {
                  "endTime": {
                    "gte": "2023-10-11T23:12:02+08:00",
                    "lte": "2023-10-11T23:12:02+08:00",
                    "time_zone": "+08:00"
                  }
                }
              }
            ]
          }
        }
      ]
    }
  }
}

具体解释如下:

  • "query": 指定查询语句。
  • "bool": 使用布尔查询,实现多个查询条件的组合。
  • "must": 必须匹配的查询条件,相当于逻辑上的"AND"。
  • "term": 匹配一个精确值的查询。
  • "deviceId": 待匹配的字段名。
  • 3: 待匹配的值。
  • "bool": 使用布尔查询,实现多个查询条件的组合。
  • "should": 至少匹配一个查询条件,相当于逻辑上的"OR"。
  • "range": 匹配一个数值或日期范围内的查询。
  • "startTime": 待匹配的字段名。
  • "endTime": 待匹配的字段名。
  • "gte": 大于或等于(greater than or equal to)指定值。
  • "lte": 小于或等于(less than or equal to)指定值。
  • "time_zone": 指定时区。
相关推荐
float_六七1 小时前
IntelliJ IDEA双击Ctrl的妙用
java·ide·intellij-idea
能摆一天是一天2 小时前
JAVA stream().flatMap()
java·windows
颜如玉3 小时前
🤲🏻🤲🏻🤲🏻临时重定向一定要能重定向🤲🏻🤲🏻🤲🏻
java·http·源码
雁于飞4 小时前
vscode中使用git、githup的基操
笔记·git·vscode·学习·elasticsearch·gitee·github
程序员的世界你不懂4 小时前
【Flask】测试平台开发,新增说明书编写和展示功能 第二十三篇
java·前端·数据库
星空寻流年4 小时前
设计模式第一章(建造者模式)
java·设计模式·建造者模式
gb42152875 小时前
java中将租户ID包装为JSQLParser的StringValue表达式对象,JSQLParser指的是?
java·开发语言·python
曾经的三心草5 小时前
Python2-工具安装使用-anaconda-jupyter-PyCharm-Matplotlib
android·java·服务器
Metaphor6925 小时前
Java 高效处理 Word 文档:查找并替换文本的全面指南
java·经验分享·word
ChinaRainbowSea5 小时前
7. LangChain4j + 记忆缓存详细说明
java·数据库·redis·后端·缓存·langchain·ai编程