Eri*_*ick 5 java elasticsearch
我正在尝试执行Elasticsearch查询,并希望Elasticsearch为我分组结果,而不是让我的客户端代码手动执行.看看Elasticsearch 文档,它看起来像是我正在寻找的存储聚合,但我找不到任何使用它的示例,或者输出看起来是什么样的,以确保这就是我想要的.
我的问题是:是否可以通过Elasticsearch中的密钥对文档进行分组?如果是这样,我如何以及在哪里可以找到有关如何操作的文档,使用查询DSL或(最好)Java API的Javadoc?
我猜你试图通过elasticsearch中的一个字段进行分组,你可以通过使用术语聚合来实现.
以下是使用查询dsl的方法,
POST _search
{
"aggs": {
"genders": {
"terms": {
"field": "gender"
},
"aggs": {
"top_tag_hits": {
"top_hits": {
"_source": {
"include": [
"include_fields_name"
]
},
"size": 100
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
和性别是文档中的字段,它的响应可以
{
...
"aggregations" : {
"genders" : {
"buckets" : [
{
"key" : "male",
"doc_count" : 10,
"tag_top_hits":{"hits":...}
},
{
"key" : "female",
"doc_count" : 10,
"tag_top_hits":{"hits":...}
},
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用Java api,我为你的评论添加了tophits聚合.(但不在查询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();
}
});
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!!
| 归档时间: |
|
| 查看次数: |
6939 次 |
| 最近记录: |