多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# Range Query(范围查询) 原文链接 : [https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-range-query.html](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-range-query.html) 译文链接 : [http://www.apache.wiki/pages/viewpage.action?pageId=4260599](http://www.apache.wiki/pages/viewpage.action?pageId=4260599) 贡献者 : @小布丁 通过某一个包含项的字段匹配文档。 **Lucene** 查询的类型取决于字段类型,对于 _string_ (字符串字段),查询是一个 **TermRangeQuery** ,而对于 _number / date_ 字段,查询是一个 **NumericRangeQuery **。下面这个示例返回 _age_ 在 _10_ 到 _20_ 之间的所有文档。 范围查询接受以下参数: | 参数 | 说明 | | --- | --- | | gte | 大于或等于 | | gt | 大于 | | lte | 小于或等于 | | lt | 小于 | | boost | 设置查询的 _boost_ 值,默认为 _1.0_ | ##  date (日期)字段的范围查询 对类型为 [**date** ](https://www.elastic.co/guide/en/elasticsearch/reference/current/date.html)(日期)的字段运行 **range** (范围)查询时,可以使用 _“[Date Math](https://www.elastic.co/guide/en/elasticsearch/reference/current/common-options.html#date-math)”_ 部分指定范围: ``` GET _search { "query": { "range" : { "date" : { "gte" : "now-1d/d", "lt" : "now/d" } } } } ``` ###  Date math 和 rounding (四舍五入) 当使用 **[date math](https://www.elastic.co/guide/en/elasticsearch/reference/current/common-options.html#date-math)** 将日期 _round_ (四舍五入)到最近的日,月,小时等时,舍入日期取决于范围的结束是包含还是排除。 向上舍入移动到舍入范围的最后一个毫秒,并向下舍入到舍入范围的第一个毫秒。 例如: | 参数 | 说明 | | --- | --- | | gt | 大于向上舍入的日期: _2014-11-18 || / M_ 变成 _2014-11-30T23:59:59.999_ ,即不包括整个月。 | | gte | 大于或等于向下舍入的日期: _2014-11-18 || / M_ 即成为 _2014-11-01_ ,即包括整个月。 | | lt | 小于向下舍入的日期: _2014-11-18 || / M_ 成为 _2014-11-01_ ,即不包括整个月。 | | lte | 小于或等于向上舍入的日期: _2014-11-18 || / M_ 成为 _2014-11-30T23:59:59.999_ ,即包括整个月。 | ###  Range (范围)查询中的日期格式化 格式化的日期将使用指定的默认 **[format](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-date-format.html)** (格式)解析 [**date**](https://www.elastic.co/guide/en/elasticsearch/reference/current/date.html) (日期)字段,但可以通过将格式参数传递到 **range** (范围)查询来覆盖默认格式: ``` GET _search { "query": { "range" : { "born" : { "gte": "01/01/2012", "lte": "2013", "format": "dd/MM/yyyy||yyyy" } } } } ``` ###  Range (范围)查询中的时区 通过在日期值本身指定时区(如果 **[format](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-date-format.html)** 允许),日期可以从另一个时区转换为 **UTC** ,或者可以将其指定为 _time_zone_ 参数: ``` GET _search { "query": { "range" : { "timestamp" : { "gte": "2015-01-01 00:00:00", ① "lte": "now", ② "time_zone": "+01:00" } } } } ``` ①此日期将转换为 _2014-12-31T23:00:00 UTC_ 。 ② _now_ 不受 _time_zone_ 参数的影响(日期必须存储为UTC)。