Elasticsearch 时间范围查询:使用字符串格式进行时间过滤
Elasticsearch 时间范围查询:使用字符串格式进行时间过滤
在 Elasticsearch 中,我们可以使用 rangeQuery 对数据进行时间范围过滤。默认情况下,rangeQuery 使用数值类型进行时间范围指定。但有时我们需要使用字符串格式来表示时间范围,例如从数据库或其他系统获取的时间戳。
以下示例展示如何使用字符串格式进行时间范围查询:
BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder()
.must(new MatchAllQueryBuilder())
.filter(QueryBuilders.rangeQuery("time")
.from('startTimeString')
.to('endTimeString')
.includeLower(true)
.includeUpper(true));
其中,'startTimeString' 和 'endTimeString' 需要按照 Elasticsearch 支持的时间格式进行指定,例如 '2022-01-01T00:00:00+0800'。
如果需要支持多种时间格式,可以使用多个 rangeQuery 组合查询,例如:
BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder()
.must(new MatchAllQueryBuilder())
.filter(QueryBuilders.rangeQuery("time")
.from('startTimeString')
.to('endTimeString')
.includeLower(true)
.includeUpper(true))
.filter(QueryBuilders.rangeQuery("time")
.from('startTimeString2')
.to('endTimeString2')
.includeLower(true)
.includeUpper(true));
需要注意的是,使用字符串格式进行时间范围查询时,需要确保所有时间字符串都符合 Elasticsearch 支持的时间格式。否则,查询结果可能不准确。
原文地址: https://www.cveoy.top/t/topic/oeqz 著作权归作者所有。请勿转载和采集!