文章目录

  • 1 范围查询的符号
  • 2 数值范围查询
  • 3 时间范围查询
    • 3.1 简单查询示例
    • 3.2 关于时间的数学表达式(date-math)
    • 3.3 关于时间的四舍五入
  • 4 日期格式化范围查询(format)
  • 5 时区范围查询(time_zone)

1 范围查询的符号

符号 含义
gte greater-than or equal to, 大于或等于
gt greater-than, 大于
lte less-than or equal to, 小于或等于
lt less-than, 小于

2 数值范围查询

需求: 查询商品中40 <= price <= 80的文档:

GET book_shop/_search
{"query": {"range": {"price": {"gte": 40,"lte": 80,"boost": 2.0 // 设置得分的权重值(提升值), 默认是1.0}}}
}

3 时间范围查询

3.1 简单查询示例

需求: 查询网站中最近一天发布的博客:

GET website/_search
{"query": {"range": {"post_date": {"gte": "now-1d/d", // 当前时间的上一天, 四舍五入到最近的一天"lt":  "now/d"       // 当前时间, 四舍五入到最近的一天}}}
}

3.2 关于时间的数学表达式(date-math)

Elasticsearch中时间可以表示为now, 也就是系统当前时间, 也可以是以||结尾的日期字符串表示.

在日期之后, 可以选择一个或多个数学表达式:

  • +1h —— 加1小时;
  • -1d —— 减1天;
  • /d —— 四舍五入到最近的一天.

下面是Elasticsearch支持数学表达式的时间单位:

表达式 含义 表达式 含义
y M
w 星期 d
h 小时 H 小时
m 分钟 s

说明: 假设系统当前时间now = 2018-10-01 12:00:00 :

  • now+1h: now的毫秒值 + 1小时, 结果是: 2018-10-01 13:00:00.
  • now-1h: now的毫秒值 - 1小时, 结果是: 2018-10-01 11:00:00.
  • now-1h/d: now的毫秒值 - 1小时, 然后四舍五入到最近的一天的起始, 结果是: 2018-10-01 00:00:00.
  • 2018.10.01||+1M/d: 2018-10-01的毫秒值 + 1月, 再四舍五入到最近一天的起始, 结果是: 2018-11-01 00:00:00.

3.3 关于时间的四舍五入

对日期中的日、月、小时等 进行四舍五入时, 取决于范围的结尾是包含(include)还是排除(exclude).

向上舍入: 移动到舍入范围的最后一毫秒;

向下舍入: 一定到舍入范围的第一毫秒.

举例说明:

① “gt”: “2018-12-18||/M” —— 大于日期, 需要向上舍入, 结果是2018-12-31T23:59:59.999, 也就是不包含整个12月.

② “gte”: “2018-12-18||/M” —— 大于或等于日期, 需要向下舍入, 结果是 2018-12-01, 也就是包含整个12月.

③ “lt”: “2018-12-18||/M” —— 小于日期, 需要向上舍入, 结果是2018-12-01, 也就是不包含整个12月.

④ “lte”: “2018-12-18||/M” —— 小于或等于日期, 需要向下舍入, 结果是2018-12-31T23:59:59.999, 也就是包含整个12月.

4 日期格式化范围查询(format)

格式化日期查询时, 将默认使用日期field中指定的格式进行解析, 当然也可以通过format参数来覆盖默认配置.

示例:

GET website/_search
{"query": {"range": {"post_date": {"gte": "2/1/2018", "lte": "2019","format": "dd/MM/yyyy||yyyy"}}}
}

注意: 如果日期中缺失了部分年、月、日, 缺失的部分将被填充为unix系统的初始值, 也就是1970年1月1日.

比如, 将dd指定为format, 像"gte": 10将转换为1970-01-10T00:00:00.000Z.

5 时区范围查询(time_zone)

如果日期field的格式允许, 也可以通过在日期值本身中指定时区, 从而将日期从另一个时区的时间转换为UTC时间, 或者为其指定特定的time_zone参数.

示例:

GET website/_search
{"query": {"range": {"post_date": {"gte": "2018-01-01 00:00:00","lte": "now","format": "yyyy-MM-dd hh:mm:ss","time_zone": "+1:00"}}}
}

ES中的日期类型必须按照UTC时间格式存储, 所以, 上述的2018-01-01 00:00:00将被转换为2017-12-31T23:00:00 UTC.

另外需要注意的是, now是不受time_zone影响的.

Elasticsearch中如何进行日期(数值)范围查询相关推荐

  1. 【Elasticsearch】Elasticsearch中 aggs (桶)聚合查询和进行二次聚合查询

    [Elasticsearch]Elasticsearch中 aggs (桶)聚合查询和进行二次聚合查询 Bucket aggregationsedit Bucket aggregations don' ...

  2. 解决oracle数据库的表中存在异常日期值在查询时抛出ora-01841错误的办法

    生产环境的服务器上,在查询时抛出SQLDataException,错误代码为ora-01841 ORA-01841: (完整) 年份值必须介于 -4713 和 +9999 之间, 且不为 0 经排查是 ...

  3. Elasticsearch:理解 Elasticsearch 中的 Percolator 数据类型及 Percolate 查询

    Elasticsearch 是功能强大的功能丰富的工具.在今天的文章中,我来介绍一下 Percolator 数据类型.同时也介绍一下 Percolate query. 您需要基本了解 Elastics ...

  4. Elasticsearch+Mongo亿级别数据导入及查询实践

    数据方案: 在Elasticsearch中通过code及time字段查询对应doc的mongo_id字段获得mongodb中的主键_id 通过获得id再进入mongodb进行查询   1,数据情况: ...

  5. 如何用你最熟悉的 SQL 来查询 Elasticsearch 中的数据?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! Elasticsearch 是一个全文搜索引擎,具有您期 ...

  6. 如何用 SQL 来查询 Elasticsearch 中的数据?

    大点击"开发者技术前线",选择"星标" 在看|星标|留言,  真爱 回复"666",获取一份技术人专属大礼包 参考:https://elas ...

  7. 面试官发难,如何用 SQL 来查询 Elasticsearch 中的数据?

    点击"开发者技术前线",选择"星标????" 让一部分开发者看到未来 回复"666",获取一份技术人专属大礼包 参考:https://ela ...

  8. Elasticsearch中的Term查询和全文查询

    Elasticsearch中的Term查询和全文查询 前言 Term 查询 exists 查询 fuzzy 查询 ids 查询 prefix 查询 range 查询 regexp 查询 term 查询 ...

  9. 在Elasticsearch中查询Term Vectors词条向量信息

    这篇文章有点深度,可能需要一些Lucene或者全文检索的背景.由于我也很久没有看过Lucene了,有些地方理解的不对还请多多指正. 更多内容还请参考整理的ELK教程 关于Term Vectors 额, ...

最新文章

  1. 《团队合作大坑合集》
  2. 关于修改linux hostname的问题,尤其是redhat 7修改hostname的方式
  3. 云炬Android开发笔记 12基于WebView的混合App框架设计(包含浏览器与原生请求Cookie的处理)
  4. Python-day06-2018.7.9_编码以及小知识点补充
  5. Kafka解析之topic创建(2)
  6. 浏览器用户脚本管理器(Tampermonkey)
  7. plc单片机组态软件php_STC8单片机扩展WiFi通信实现功能与组态王组态软件详细组态...
  8. [轉]9个优秀的基于 JavaScript 与 CSS 的 Web 图表框架
  9. 关于如何修改CSDN中的字体大小和颜色
  10. 计算一路话音消耗的带宽
  11. Hbase下载、安装流程
  12. 计算机永远无法超越人类——从李世石与阿尔法的人机大战中想到的
  13. 服务器DDoS攻击有几种类型?
  14. TF卡用FAT32还是NTFS?
  15. 1483套求职个人简历PPT模板免费下载网址
  16. Jenkins项目配置-maven项目-全面
  17. 17、springcloud整合lettuce使用redis
  18. 25G/100G-PON演进与趋势分析
  19. OSPF 理论二 (赤诚善良 永远热爱)
  20. tnsping能成功却连不到目标数据库

热门文章

  1. SAP FI FAGLFLEXT/FAGLFLEXA 数据不正确重新更新操作
  2. 阿联酋是发达国家还是发展中国家
  3. SAP Credit Memo Debit Memo
  4. 【CIO说】转型SaaS,为什么Oracle、SAP的第一选择是人力资源软件
  5. 选择屏幕设置默认日期
  6. ABAP程序中的七大危险漏洞
  7. 迎来“进化”风口的电竞,能否在未来站上传统体育的肩膀?
  8. 内存溢出_JVM|03内存溢出实战
  9. vb 访问远程计算机,vb 怎么访问远程电脑SQL SERVER数据库
  10. 如何更改微信标签名字_微信透明昵称代码复制