调用es api

进行检索

如文档所示

SearchResponse<Product> search = client.search(s -> s
    .index("products")
    .query(q -> q
        .term(t -> t
            .field("name")
            .value(v -> v.stringValue("bicycle"))
        )),
    Product.class);

for (Hit<Product> hit: search.hits().hits()) {
    processProduct(hit.source());
}

使用index指定indexquery指定搜索条件 product.class 指定实体类
如以下 搜索全部

            bankSearchResponse = elasticsearchClient.search((e) -> {
                return e.index("bank")
                        .query((q) -> {
                            return q.matchAll(new MatchAllQuery.Builder().build());
                        })
            }, Bank.class);

可以调用bankSearchResponse.hits().hits()获取检索结果

聚合检索

首先组装一个聚合规则 和直接向es发送请求一样 可以对上一次查询的结果进行再次聚合在之后再指定一个aggregations

        Map<String, Aggregation> aggs = new HashMap<>();
        aggs.put("bankTerm", Aggregation.of((c) -> {
            return c.terms(TermsAggregation.of((t) -> {
                return t.field("age");
            })).aggregations("ageAvg", Aggregation.of((t) -> {
                return t.avg((v) -> {
                    return v.field("balance");
                });
            }));
        }));

获取聚合结果
每个聚合规则都封装了一个结果对象
如terms在结果中有个buckets对象
image
我们可以使用.lterms.buckets对象获取到这个结果

        LongTermsAggregate lterms = bankTerm.lterms();
        Buckets<LongTermsBucket> buckets = lterms.buckets();

avg也一样 avg中有个value结果
可以这样获取到value

ageAvg.avg().value();
posted @ 2022-02-06 10:59  RainbowMagic  阅读(246)  评论(0)    收藏  举报