Java Elasticsearch: 查询每天 6:00 到 24:00 的数据
要查询每天 6:00 到 24:00 的数据,可以使用 Elasticsearch 的 range 查询和时间范围过滤器。以下是一个示例代码:
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.common.unit.TimeValue;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.RangeQueryBuilder;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import java.io.IOException;
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.ZoneOffset;
public class ElasticsearchQueryExample {
private static final String INDEX_NAME = 'your_index_name';
public static void main(String[] args) {
try (RestHighLevelClient client = new RestHighLevelClient()) {
SearchRequest searchRequest = new SearchRequest(INDEX_NAME);
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
// 构建时间范围过滤器
RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery('@timestamp')
.gte(getDateTimeWithOffset(LocalDate.now(), LocalTime.of(6, 0), ZoneOffset.UTC))
.lte(getDateTimeWithOffset(LocalDate.now(), LocalTime.of(23, 59, 59), ZoneOffset.UTC));
// 创建bool查询
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery().filter(rangeQueryBuilder);
searchSourceBuilder.query(boolQueryBuilder);
// 设置其他查询参数,例如size、timeout等
searchSourceBuilder.size(10);
searchSourceBuilder.timeout(TimeValue.timeValueSeconds(10));
searchRequest.source(searchSourceBuilder);
SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
// 处理查询结果
// ...
} catch (IOException e) {
e.printStackTrace();
}
}
// 获取带有时区偏移的日期时间
private static long getDateTimeWithOffset(LocalDate date, LocalTime time, ZoneOffset zoneOffset) {
return time.atDate(date).toEpochSecond(zoneOffset);
}
}
在上面的代码中,我们首先创建了一个SearchRequest对象,指定了要查询的索引名称。然后,我们构建了一个SearchSourceBuilder对象,并创建了一个范围查询过滤器RangeQueryBuilder,用于过滤@timestamp字段的时间范围。我们使用gte方法指定起始时间为当天的 6:00,使用lte方法指定结束时间为当天的 23:59:59。
接下来,我们创建了一个BoolQueryBuilder对象,并将范围查询过滤器添加到其中的过滤器子句中。这将保证只返回位于指定时间范围内的文档。
最后,我们设置了其他查询参数,例如查询的文档数量、超时时间等。然后,我们将SearchSourceBuilder对象设置为SearchRequest的 source,并使用RestHighLevelClient执行查询。
请注意,上述示例中的代码仅用于演示目的,你需要根据实际的索引结构和字段名称进行适当的调整。
原文地址: https://www.cveoy.top/t/topic/pT5r 著作权归作者所有。请勿转载和采集!