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 支持的时间格式。否则,查询结果可能不准确。

Elasticsearch 时间范围查询:使用字符串格式进行时间过滤

原文地址: https://www.cveoy.top/t/topic/oeqz 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录