记录Elasticsearch Java API中的一些用法[不定时更新]

本文详细介绍了如何使用Elasticsearch进行复杂查询,包括设置过滤条件、应用精确查询、模糊查询和范围查询。同时,深入探讨了ES分桶的设置方法,如按时间分桶,并计算不同分位值的统计信息,最后展示了如何进行结果排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、设置Query(过滤条件)

// 方法中前者表示es索引中的字段名,后者表示过滤条件的值
BoolQueryBuilder query = QueryBuilders.boolQuery()
                .filter(QueryBuilders.termQuery("serviceIp", serviceIp)) // 精确查询
                .filter(QueryBuilders.wildcardQuery("location", "*" + host + "*")) // 模糊查询
                .filter(QueryBuilders.rangeQuery("errorCode").lt(0).gte(400)) // 范围查询
                .filter(QueryBuilders.rangeQuery("timestamp").from("2019-01-19").to("2019-02-19")); // 范围查询
// 判断不为空,再设置
if (StringUtils.isNotBlank(country)) {
    query.filter(QueryBuilders.termQuery("country", country));
}
// should的用法
query.should(QueryBuilders.termQuery("device", device));
// must的用法
query.must(QueryBuilders.termQuery("device", device));

2、设置Aggregation(ES分桶)

3、分位值

// 按时间分桶(时间间隔为一天"day")
DateHistogramAggregationBuilder histogramAgg = AggregationBuilders.dateHistogram("dateHistogram").field("timestamp")
                .extendedBounds(new ExtendedBounds(from, to)).minDocCount(0)
                .dateHistogramInterval(new DateHistogramInterval("day"));
// 定义不同的分位值
double[] percents = new double[]{50, 75, 90, 99.9};
histogramAgg.subAggregation(AggregationBuilders.percentiles("percentiles").field("duration").percentiles(percents));
SearchResponse searchResponse = CLIENT.prepareSearch(indexName)
        .setQuery(query).addAggregation(histogramAgg)
        .setSize(0).execute().actionGet();
if (searchResponse.getHits().getTotalHits() > 0) {
    Histogram histogram = searchResponse.getAggregations().get("dateHistogram");
    for (Histogram.Bucket histogramBucket : histogram.getBuckets()) {
        // 分位值取值方法
        Percentiles percentiles = histogramBucket.getAggregations().get("percentiles");
        JSONObject jsonObject = new JSONObject();
        for (Percentile percentile : percentiles) {
            jsonObject.put(String.valueOf(percentile.getPercent()), percentile.getValue());
        }
        System.out.println(jsonObject.toString());
    }
}

4、排序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值