我使用elastic4s库查询elasticsearch (ES)。版本的elastic4s和ES本身2.4.0。
假设我有一个复合对象,我把它放到ES中,就像
case class MyObject(id: Long, vall: KeyVal, vals: Seq[KeyVal]) KeyVal在哪里
case class KeyVal(id: Long, name: String) 现在,我查询了ES并得到了我想要反序列化回MyObject的响应:
implicit object MyObjectHitAs extends HitAs[MyObject] {
override def as(hit: RichSearchHit): MyObject = {
MyObject(
hit.field("id").getValue[String]
KeyVal(hit.field("vall.id").getValue[Long], field("vall.name").getValue[String]),
//what should I code here to get the Seq[KeyVal] ???
)
}
}请解释如何反序列化KeyVal的数组。谢谢。
发布于 2017-03-03 12:31:34
在elastic4s的最新版本(即5.0以后)中,您将使用HitReader类型。你的例子就会像这样。
implicit object MyObjectHitAs extends HitReader[MyObject] {
override def read(hit: Hit): Either[Throwable, MyObject] = {
val obj = MyObject(
hit.sourceField("id").toString.toLong,
KeyVal(hit.sourceField("vall.id").toString.toLong, hit.sourceField("vall.name").toString),
hit.sourceField("vals").asInstanceOf[Seq[AnyRef]].map { entry =>
KeyVal(hit.sourceField("vall.id").toString.toLong, hit.sourceField("vall.name").toString)
}
)
Right(obj)
}
}尽管使用内置于json映射器比手工制作要容易得多。
https://stackoverflow.com/questions/40517893
复制相似问题