Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用它解析深度嵌套的elasticsearch聚合';s客户端API_Java_Scala_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch - Fatal编程技术网 elasticsearch,Java,Scala,elasticsearch" /> elasticsearch,Java,Scala,elasticsearch" />

Java 使用它解析深度嵌套的elasticsearch聚合';s客户端API

Java 使用它解析深度嵌套的elasticsearch聚合';s客户端API,java,scala,elasticsearch,Java,Scala,elasticsearch,我正在使用Java客户端API恢复聚合。以下是我正在处理的结构 aggregations top_models buckets key : "BMW" doc_count : 3 top_models buckets key : "X5" doc_count : 2 top_hits source

我正在使用Java客户端API恢复聚合。以下是我正在处理的结构

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
我正在尝试按照(玩具)代码检索所有结果

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())


  }


  }

 }
需要将最终结果填充到此类

case class FinalResponse(bucketName: String, count: Long, children: List[FinalResponse])

由于聚合和bucket之间的嵌套关系,检索所有聚合结果变得非常复杂。您是如何实现这一点的?

在我之前的项目中,我们使用这种方式从弹性搜索中理想化复杂对象:

弹性搜索允许您获得结果集每个元素的纯json视图(作为字符串)。然后,我们将Jacson json库与scala模块一起使用,并创建类似pojo的类来反序列化数据

弹性搜索JavaAPI是一组可怕的嵌套映射。算了吧

val hits = qb.execute().actionGet().getHits().getHits().asScala
hits.map { hit =>
  (hit.getId, hit.getSourceAsString, hit.getVersion)
}
对于agregations,它也应该是可用的