Java ES 数据查询工具类 - 支持时间范围筛选
以下是一个示例,演示如何使用 Java 查询 ES 数据的工具类,并支持根据时间范围查询:
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.RangeQueryBuilder;
import java.util.Date;
public class ESQueryUtils {
public static BoolQueryBuilder buildQuery(Date startDate, Date endDate) {
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
// 添加时间范围查询条件
RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery('timestamp')
.from(startDate)
.to(endDate)
.includeLower(true)
.includeUpper(true);
boolQueryBuilder.must(rangeQueryBuilder);
// 可以继续添加其他查询条件
return boolQueryBuilder;
}
}
在上述示例中,我们定义了一个名为buildQuery的静态方法,它接受两个日期参数startDate和endDate作为查询的时间范围。它首先创建一个BoolQueryBuilder实例,并使用QueryBuilders.rangeQuery构建一个时间范围查询条件,并将其添加到must查询中。可以通过调用其他查询构建器方法向must查询中添加更多的查询条件。
使用该工具类时,可以使用以下代码示例:
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.search.SearchHit;
import java.util.Date;
public class Main {
public static void main(String[] args) {
// 创建ES客户端
TransportClient client = createClient();
// 构建查询条件
Date startDate = new Date(System.currentTimeMillis() - 24 * 3600 * 1000);
Date endDate = new Date();
BoolQueryBuilder boolQueryBuilder = ESQueryUtils.buildQuery(startDate, endDate);
// 执行查询
SearchResponse searchResponse = client.prepareSearch('my_index')
.setTypes('my_type')
.setQuery(boolQueryBuilder)
.get();
// 处理查询结果
for (SearchHit hit : searchResponse.getHits()) {
System.out.println(hit.getSourceAsString());
}
// 关闭客户端
client.close();
}
private static TransportClient createClient() {
// 创建ES客户端
// ...
return client;
}
}
在上述示例中,我们创建了一个ES客户端,并使用ESQueryUtils.buildQuery构建了一个查询条件。然后我们使用该查询条件执行了一个查询,并遍历了查询结果。最后,我们关闭了ES客户端。
原文地址: https://www.cveoy.top/t/topic/odTF 著作权归作者所有。请勿转载和采集!