Java Elasticsearch 时间范围查询工具类(String类型时间)
以下是一个 Java 查询 Elasticsearch 中数据的工具类,支持时间范围查询,时间类型为 String:
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.search.SearchType;
import org.elasticsearch.client.Client;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class ESUtils {
/**
* 查询 ES 中的数据
* @param client ES 客户端
* @param index 索引名
* @param type 类型名
* @param startTime 起始时间,格式为 yyyy-MM-dd HH:mm:ss
* @param endTime 结束时间,格式为 yyyy-MM-dd HH:mm:ss
* @return 查询结果,List<Map<String, Object>> 类型
*/
public static List<Map<String, Object>> search(Client client, String index, String type, String startTime, String endTime) {
List<Map<String, Object>> resultList = new ArrayList<>();
BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
queryBuilder.must(QueryBuilders.rangeQuery('time').gte(startTime));
queryBuilder.must(QueryBuilders.rangeQuery('time').lte(endTime));
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.query(queryBuilder);
sourceBuilder.size(10000);
sourceBuilder.timeout(TimeValue.timeValueMinutes(1L));
SearchResponse response = client.prepareSearch(index)
.setTypes(type)
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
.setQuery(queryBuilder)
.setScroll(new TimeValue(60000))
.setSize(100)
.execute()
.actionGet();
do {
SearchHits hits = response.getHits();
for (SearchHit hit : hits) {
Map<String, Object> result = hit.getSourceAsMap();
resultList.add(result);
}
response = client.prepareSearchScroll(response.getScrollId())
.setScroll(new TimeValue(60000))
.execute()
.actionGet();
} while (response.getHits().getHits().length != 0);
return resultList;
}
}
这个工具类中,需要传入 ES 的客户端对象、索引名、类型名以及起始时间和结束时间。其中,时间的类型为 String,格式为 'yyyy-MM-dd HH:mm:ss'。这个工具类使用了 ES 的 QueryBuilder 来构造查询条件,查询结果以 List<Map<String, Object>> 的形式返回。
原文地址: https://www.cveoy.top/t/topic/oeqk 著作权归作者所有。请勿转载和采集!