Best way to parse deeply nested aggregations using client API


(birjupat) #1

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.


(system) #2