I am using Java client API to get aggregations back. Following is the
structure which I am dealing with.
aggregations
top_models
buckets
key : "BMW"
doc_count : 3
top_models
buckets
key : "X5"
doc_count : 2
top_hits
source
model : X5
color : Red
source
model:X5
color : White
key : "X3"
doc_count : 1
top_hits
source
model : X3
color : Red
key : "Mercedes"
doc_count : 2
top_models
buckets
key : "Benz"
doc_count : 1
top_hits
source
model : Benz
color : Red
key : "ML"
doc_count : 1
top_hits
source
model : ML
color : Black
I am trying following (toy) code to retrieve all the results.
def getAggregations(aggres: Option[Aggregations]): Option[Iterable[Any]] = {
aggres map { agg =>
val aggS = agg.asMap().asScala
aggS map {
case (name, termAgg: Terms) => getBuckets(Option(termAgg.getBuckets
()))
case (name, topHits: TopHits) =>
val tHits = Option(topHits.getHits())
tHits map { th => getTopHits(th.asScala)
}
case (h, a: InternalAvg) => println(h + "=>" + a.getValue());
}
}
}
def getBuckets(buckets: Option[java.util.Collection[Bucket]]) = {
buckets map { bks =>
val bksS = bks.asScala
bksS map { b =>
println("Bucket Key =>" + b.getKey())
println("Doc count =>" + b.getDocCount())
getAggregations(Option(b.getAggregations())
}
}
}
I need to populate final result to this class
case class FinalResponse(bucketName: String, count: Long, children: List[
FinalResponse])
With nested relationship between Aggregations and Buckets it's becoming
convoluted to retrieve all aggregation results. how do you approach this?
--
You received this message because you are subscribed to the Google Groups "elasticsearch" group.
To unsubscribe from this group and stop receiving emails from it, send an email to elasticsearch+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/elasticsearch/b47ef1bd-9a15-4d37-94f2-95b687dfc0d4%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.