java构建es查询条件根据latestTs字段查询当前系统时间一个月内的任意时间段数据
以下是Java代码示例,用于构建Elasticsearch查询条件,以检索latestTs字段在当前系统时间一个月内的任意时间段数据:
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.RangeQueryBuilder;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class EsQueryBuilder {
public static RangeQueryBuilder getLatestTsRangeQuery() {
LocalDateTime now = LocalDateTime.now();
LocalDateTime monthAgo = now.minusMonths(1);
DateTimeFormatter formatter = DateTimeFormatter.ISO_DATE_TIME;
String nowStr = now.format(formatter);
String monthAgoStr = monthAgo.format(formatter);
return QueryBuilders.rangeQuery("latestTs")
.from(monthAgoStr)
.to(nowStr)
.format("strict_date_time");
}
}
在上面的代码中,我们使用了Elasticsearch的RangeQueryBuilder来构建查询条件。我们使用LocalDateTime来获取当前系统时间和一个月前的时间,并将它们格式化为strict_date_time格式的字符串。然后,我们使用rangeQuery方法来创建一个RangeQueryBuilder对象,并指定查询字段为latestTs。最后,我们使用from和to方法来指定查询的时间范围。
使用示例:
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import java.io.IOException;
public class EsQueryService {
private final RestHighLevelClient client;
public EsQueryService(RestHighLevelClient client) {
this.client = client;
}
public SearchResponse searchByLatestTs() throws IOException {
QueryBuilder query = EsQueryBuilder.getLatestTsRangeQuery();
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(query);
SearchRequest searchRequest = new SearchRequest("my_index");
searchRequest.source(searchSourceBuilder);
return client.search(searchRequest, RequestOptions.DEFAULT);
}
}
在上面的代码中,我们使用EsQueryBuilder类中的getLatestTsRangeQuery()方法来获取查询条件。然后,我们使用SearchSourceBuilder来构建查询请求,并将查询条件添加到请求中。最后,我们使用SearchRequest来指定查询的索引,并使用RestHighLevelClient执行查询请求
原文地址: https://www.cveoy.top/t/topic/fHHC 著作权归作者所有。请勿转载和采集!