Elasticsearch 范围查询

范围查询(range query)


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

GET _search
{
  "query": {
    "range": {
      "age": {
          "gte": 25,
          "lte": 30
      }
    }
  }
}

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

范围查询接收以下参数:

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

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

GET _search
{
    "query": {
        "range" : {
            "date" : {
                "gte" : "now-1d/d",
                "lt" :  "now/d"
            }
        }
    }
}

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

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

  • 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"
            }
        }
    }
}

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

GET _search
{
    "query": {
        "range" : {
            "timestamp" : {
                "gte": "2015-01-01 00:00:00", 
                "lte": "now", 
                "time_zone": "+01:00"
            }
        }
    }
}

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

翻译源:Elasticsearch 6.4 文档

Elasticsearch范围查询是一种用于匹配字段值位于特定范围内的文档的查询。根据字段的类型,范围查询可以是TermRangeQuery(适用于字符串字段)或NumericRangeQuery(适用于数字/日期字段)。 在范围查询中,可以指定以下参数: - field:要搜索的字段 - gt(可选):大于指定值的文档 - gte(可选):大于等于指定值的文档 - lt(可选):小于指定值的文档 - lte(可选):小于等于指定值的文档 - format(可选):用于转换日期查询中的日期格式 - relation(可选):指示范围查询如何匹配字段的方式,默认为INTERSECTS,即与查找范围相交的范围字段来匹配文档 - time_zone(可选):用于将查询中的值转换为UTC的偏移量或IANA时区 - boost(可选):用于减少或增加查询的相关性得分 以下是一个范围查询的请求示例: ``` GET _search { "query": { "range": { "age": { "gte": 25, "lte": 30 } } } } ``` 这个示例查询了age字段的值在25到30之间的文档。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Elasticsearch Range query -- 范围查询](https://blog.youkuaiyun.com/wei_bo_cai/article/details/106331465)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Elasticsearch 范围查询](https://blog.youkuaiyun.com/qq_32165041/article/details/83714203)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值