Elasticsearch 基础教程

Elasticsearch 高级教程

Elasticsearch 插件

Elasticsearch 笔记

es 如何查询时间段之间的内容

Elasticsearch 笔记 Elasticsearch 笔记


elasticsearch(es)如何查询指定时间段之间的文档列表?

推荐方式

es 的词项查询(term query)提供了范围查询 range query,它用于匹配在某一范围内的数值型、日期类型或者字符串型字段的文档。

elasticsearch 的时间类型表现形式有如下几种格式:

  1. 格式化日期的字符串,如 "2015-01-01" 或 "2015/01/01 12:10:30";
  2. 代表 milliseconds-since-the-epoch 的长整型数(epoch 指的是一个特定的时间:1970-01-01 00:00:00 UTC);
  3. 代表 seconds-since-the-epoch 的整型数

Elasticsearch 内部会把日期转换为 UTC(世界标准时间),并将其存储为表示 milliseconds-since-the-epoch 的长整型数,这样做的原因是和字符串相比,数值在存储和处理时更快。

假设查询创作日期在 2015 年 1 月 1 日和 2019 年 12 月 31 之间的文章内容,对 create_time 字段进行范围查询。

{
  "query": {
    "range": {
      "create_time": {
        "gte": "2015-01-01",
        "lte": "2019-12-31",
        "format": "yyyy-MM-dd"
      }
    }
  }
}