• Elasticsearch 范围查询


    范围查询(range query)


    范围查询用于匹配某些字段的字段值位于特定范围内的文档。Lucene查询的类型依赖于字段的类型,对于字符串字段,是TermRangeQuery,而对于数字/日期字段,查询是NumericRangeQuery。

    GET _search
    {
      "query": {
        "range": {
          "age": {
              "gte": 25,
              "lte": 30
          }
        }
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    note:查询age字段大于等于25小于等于30的文档。

    范围查询接收以下参数:

    • gte:大于等于
    • gt:大于
    • lte:小于等于
    • lt:小于
    • boost:设置查询的推动值(boost),默认为1.0

    日期字段的范围

    当范围查询运行在日期类型的字段上时,可以通过日期数学指定范围。

    GET _search
    {
        "query": {
            "range" : {
                "date" : {
                    "gte" : "now-1d/d",
                    "lt" :  "now/d"
                }
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    日期数学与舍入
    当使用日期数学将日期舍入到最近的天、月、小时等时,舍入后的日期依赖于范围的边界是否被包含。

    向上舍入移动到舍入范围的最后一毫秒,向下舍入移动到舍入范围的第一毫秒。

    • gt:大于舍入的日期,2014-11-18||/M变为2014-11-30T23:59:59.999,即不包括整个月。
    • gte:大于等于舍入的日期,2014-11-18||/M变为2014-11-01,即包括整个月。
    • lt:小于舍入的日期,204-11-18||/M变为2014-11-01,即不包括整个月。
    • lte:小于等于舍入的日期,2014-11-18||/M变为2014-11-30T23:59:59.999,即包含整个月。

    范围查询中的日期格式
    默认使用设置在日期字段中的format参数解析格式化日期,但是,此参数可以通过在范围查询中设置format参数来进行覆盖。

    GET _search
    {
        "query": {
            "range" : {
                "born" : {
                    "gte": "01/01/2012",
                    "lte": "2013",
                    "format": "dd/MM/yyyy||yyyy"
                }
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    范围查询中的时区
    通过在日期值中指定时区或使用time_zone参数指定时区,可以转换日期时区。

    GET _search
    {
        "query": {
            "range" : {
                "timestamp" : {
                    "gte": "2015-01-01 00:00:00", 
                    "lte": "now", 
                    "time_zone": "+01:00"
                }
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    note:gte参数的日期值将会被转化为2014-12-31T23:00:00 UTC
    note:now不会被time_zone参数影响(日期必须存储为UTC)

    翻译源:Elasticsearch 6.4 文档

  • 相关阅读:
    java多线程面试相关的一些问题
    怎么压缩word文档的大小?
    远程方法调用中间件Dubbo在spring项目中的使用
    Oracle SQL执行计划(2)
    物联网卡常见问题FAQ
    Hive 表 DML 操作——第2关:Select 操作
    Spring MVC框架
    Minecraft 1.16.5模组开发(五十一) 方块实体 (Tile Entity)
    Python123 期末题库
    golang 多层map如何增加key
  • 原文地址:https://blog.csdn.net/bsegebr/article/details/126359442