以下是一个使用 Java 查询 ES 数据的工具类示例,支持根据时间范围查询:

import org.apache.http.HttpHost;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.sort.SortOrder;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class ESUtils {

    private RestHighLevelClient client;

    public ESUtils(String host, int port) {
        client = new RestHighLevelClient(RestClient.builder(new HttpHost(host, port, 'http')));
    }

    public List<String> searchByTimeRange(String index, String field, String startTime, String endTime) throws IOException {
        List<String> result = new ArrayList<>();
        SearchRequest searchRequest = new SearchRequest(index);
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        searchSourceBuilder.query(QueryBuilders.rangeQuery(field).gte(startTime).lte(endTime));
        searchSourceBuilder.sort('@timestamp', SortOrder.DESC);
        searchSourceBuilder.size(10000);
        searchRequest.source(searchSourceBuilder);
        SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
        SearchHit[] searchHits = searchResponse.getHits().getHits();
        for (SearchHit hit : searchHits) {
            result.add(hit.getSourceAsString());
        }
        return result;
    }

    public void close() throws IOException {
        client.close();
    }
}

使用示例:

ESUtils esUtils = new ESUtils('localhost', 9200);
List<String> result = esUtils.searchByTimeRange('index_name', 'field_name', '2021-01-01T00:00:00.000Z', '2021-01-31T23:59:59.999Z');
for (String str : result) {
    System.out.println(str);
}
esUtils.close();

其中,searchByTimeRange方法接收四个参数:索引名、时间字段名、起始时间和结束时间。返回一个字符串列表,每个字符串代表一条查询结果。在示例中,查询的时间范围是 2021 年 1 月份,最多返回 10000 条结果。close方法用于关闭 ES 客户端连接。

Java Elasticsearch 查询工具类:基于时间范围的精准数据检索

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

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