Java 如何从elasticsearch中获取子聚合
我想得到子聚合Java 如何从elasticsearch中获取子聚合,java,
elasticsearch,aggregation,Java,
elasticsearch,Aggregation,我想得到子聚合 "size" :0 , "aggs": { "classification of day": { "date_histogram": { "field": "ALARM DATE", "format" : "dd/MM/yyyy", "interval": "day"
"size" :0 ,
"aggs": {
"classification of day": {
"date_histogram": {
"field": "ALARM DATE",
"format" : "dd/MM/yyyy",
"interval": "day"
},
"aggs": {
"classification1": {
"terms": {
"field": "CLASSIFICATION",
"keyed":true
}
}
}
}
}
above json query returns the following output.
"aggregations": {
"classification of day": {
"buckets": [
{
"key_as_string": "25/02/2016",
"key": 1456358400000,
"doc_count": 166,
"classification1": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "attack",
"doc_count": 58
},
{
"key": "compromise",
"doc_count": 30
},
{
"key": "error",
"doc_count": 24
},
{
"key": "reconnaissance",
"doc_count": 20
},
{
"key": "suspicious",
"doc_count": 19
},
{
"key": "warning",
"doc_count": 14
},
{
"key": "misuse",
"doc_count": 2
}
]
}
},
{
"key_as_string": "26/02/2016",
"key": 1456444800000,
...
我试过的Java代码
String aggregations1 = "CLASSIFICATION";
String field1 = "ALARM DATE";
DateHistogramInterval interval1 = DateHistogramInterval.DAY;
SearchResponse response = client.prepareSearch(index).setTypes(type)
.addAggregation(AggregationBuilders.dateHistogram("classification of day").field(field1)
.interval(interval1).format("dd/MM/yyyy")
.subAggregation(AggregationBuilders.terms("terms").field(aggregations1)))
.execute().actionGet();
Iterator<Aggregation> iter = response.getAggregations().iterator();// get("");
while (iter.hasNext()) {
Aggregation aggs=iter.next();
System.out.println(aggs.getName());
//aggs.
}
String aggregations1=“分类”;
字符串field1=“报警日期”;
DateHistorograminterval interval1=DateHistorograminterval.DAY;
SearchResponse response=client.prepareSearch(index).setTypes(type)
.addAggregation(AggregationBuilders.dateHistogram(“日分类”).field(field1)
.间隔(间隔1).格式(“dd/MM/yyyy”)
.子集合(AggregationBuilders.terms(“terms”).字段(aggregations1)))
.execute().actionGet();
迭代器iter=response.getAggregations().Iterator();//得到(“”);
while(iter.hasNext()){
聚合aggs=iter.next();
System.out.println(aggs.getName());
//阿格斯。
}
问题是我得到了聚合值。这里有日期,但我没有得到分类。基本上,我想提取一个对象的日期分类 我设法让它工作起来了。如果有人觉得这有帮助,我在这里添加我的答案
String aggregations1 = "CLASSIFICATION";
String field1 = "ALARM DATE";
DateHistogramInterval interval1 = DateHistogramInterval.DAY;
SearchResponse sr = client.prepareSearch(index).setTypes(type)
.addAggregation(AggregationBuilders.dateHistogram("classification of day").field(field1)
.interval(interval1).format("dd/MM/yyyy")
.subAggregation(AggregationBuilders.terms("classifications").field(aggregations1)))
.execute().actionGet();
// sr is here your SearchResponse object
Histogram agg = sr.getAggregations().get("classification of day");
Collection<Histogram.Bucket> buckets = (Collection<Histogram.Bucket>) agg.getBuckets();
// For each entry
for (Histogram.Bucket bucket : buckets) {
if (bucket.getDocCount() != 0) {
System.out.println((int) bucket.getDocCount());
System.out.println(bucket.getKeyAsString());
Terms terms =bucket.getAggregations().get("classifications");
Collection<Terms.Bucket> bkts = terms.getBuckets();
for (Bucket b : bkts) {
if (b.getDocCount() != 0) {
//ESClassification classificaiton = new ESClassification();
System.out.println((int) b.getDocCount());
System.out.println(b.getKeyAsString());
} else {
//list = Collections.<ESClassification> emptyList();
}
}
} else {
//list = Collections.<ESClassification> emptyList();
}
}
String aggregations1=“分类”;
字符串field1=“报警日期”;
DateHistorograminterval interval1=DateHistorograminterval.DAY;
SearchResponse sr=client.prepareSearch(索引).setTypes(类型)
.addAggregation(AggregationBuilders.dateHistogram(“日分类”).field(field1)
.间隔(间隔1).格式(“dd/MM/yyyy”)
.子聚合(聚合生成器.术语(“分类”).字段(聚合1)))
.execute().actionGet();
//sr是您的SearchResponse对象
直方图agg=sr.getAggregations().get(“日分类”);
集合bucket=(集合)agg.getbucket();
//对于每个条目
用于(直方图。桶:桶){
if(bucket.getDocCount()!=0){
System.out.println((int)bucket.getDocCount());
System.out.println(bucket.getKeyAsString());
Terms=bucket.getAggregations().get(“分类”);
集合bkts=terms.getBucket();
用于(铲斗b:bkts){
如果(b.getDocCount()!=0){
//ESClassification Classification=新的ESClassification();
System.out.println((int)b.getDocCount());
System.out.println(b.getKeyAsString());
}否则{
//list=Collections.emptyList();
}
}
}否则{
//list=Collections.emptyList();
}
}
完美。我真的在找它。好问题,完美答案