elasticsearch(es)如何查询指定时间段之间的文档列表?
推荐方式
es 的词项查询(term query)提供了范围查询 range query
,它用于匹配在某一范围内的数值型、日期类型或者字符串型字段的文档。
elasticsearch 的时间类型表现形式有如下几种格式:
- 格式化日期的字符串,如 "2015-01-01" 或 "2015/01/01 12:10:30";
- 代表 milliseconds-since-the-epoch 的长整型数(epoch 指的是一个特定的时间:1970-01-01 00:00:00 UTC);
- 代表 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"
}
}
}
}