gpt4 book ai didi

java - 是否可以使用 Elasticsearch 聚合按键对结果进行分组?

转载 作者:搜寻专家 更新时间:2023-10-31 19:38:34 35 4
gpt4 key购买 nike

我正在尝试执行 Elasticsearch 查询,并希望 Elasticsearch 为我对结果进行分组,而不是让我的客户端代码手动执行。查看 Elasticsearch documentation ,看来分桶聚合就是我要找的东西,但我找不到任何使用它的示例,也找不到输出的样子以确保这就是我想要的。

我的问题是:是否可以在 Elasticsearch 中按键对文档进行分组?如果是这样,我如何以及在哪里可以找到有关如何执行此操作的文档,使用查询 DSL 或(最好)Java API 的 Javadoc?

最佳答案

我猜你正试图在 elasticsearch 中按字段分组,你可以使用 Terms aggregation. 来完成

这是使用查询 dsl 的方法,

POST _search 
{
"aggs": {
"genders": {
"terms": {
"field": "gender"
},
"aggs": {
"top_tag_hits": {
"top_hits": {
"_source": {
"include": [
"include_fields_name"
]
},
"size": 100
}
}
}
}
}
}

性别是文档中的字段,它的响应可以是

{
...

"aggregations" : {
"genders" : {
"buckets" : [
{
"key" : "male",
"doc_count" : 10,
"tag_top_hits":{"hits":...}
},
{
"key" : "female",
"doc_count" : 10,
"tag_top_hits":{"hits":...}
},
]
}
}
}

使用 Java api , 我添加了 tophits aggregation征求意见。 (但不在查询 dsl 中)

client.prepareSearch("index").setTypes("types").addAggregation(
AggregationBuilders.terms("agg_name").field("gender").subAggregation(
AggregationBuilders.topHits("documents").setSize(10)
)
).execute(new ActionListener<SearchResponse>() {
@Override
public void onResponse(SearchResponse response) {
Terms agg_name_aggregation=response.getAggregations().get("agg_name");
for (Terms.Bucket bucket : agg_name_aggregation.getBuckets()) {
TopHits topHits=bucket.getAggregations().get("documents");
System.out.println("term = " + bucket.getKey());
// do what you want with top hits..
}
}

@Override
public void onFailure(Throwable e) {
e.printStackTrace();
}
});

希望这对您有所帮助!

关于java - 是否可以使用 Elasticsearch 聚合按键对结果进行分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25212607/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com