以下是一个Java查询es中数据的工具类,支持时间范围查询,时间类型为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>>的形式返回

Java查询es中的数据的工具类支持时间范围查询时间类型为string

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

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