首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >elastic4s:反序列化搜索结果

elastic4s:反序列化搜索结果
EN

Stack Overflow用户
提问于 2016-11-09 23:46:47
回答 1查看 949关注 0票数 0

我使用elastic4s库查询elasticsearch (ES)。版本的elastic4s和ES本身2.4.0。

假设我有一个复合对象,我把它放到ES中,就像

代码语言:javascript
复制
case class MyObject(id: Long, vall: KeyVal, vals: Seq[KeyVal])  

KeyVal在哪里

代码语言:javascript
复制
case class KeyVal(id: Long, name: String)  

现在,我查询了ES并得到了我想要反序列化回MyObject的响应:

代码语言:javascript
复制
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的数组。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-03 12:31:34

在elastic4s的最新版本(即5.0以后)中,您将使用HitReader类型。你的例子就会像这样。

代码语言:javascript
复制
 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映射器比手工制作要容易得多。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40517893

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档