使用DocumentMap索引嵌套对象

时间:2014-04-29 16:25:10

标签: scala elastic4s

我试图使用DocumentMap创建批量索引。 我映射这样的类

 case class Comment(id: String, fromId: String, fromName: String, message: String,     creationTime: String, likeCount: Int =0)
  extends DocumentMap {
  def map = Map("id" -> id, "fromId" -> fromId, "fromName" -> fromName, "message" ->   message, "createdTime" -> creationTime, "likeCont" -> likeCount)
 }

 case class Post(id: String, fromId: String, fromName: String, message: String, fullUrl:   String, createdTime: String, updateTime: String, likeCont: Int= 0, comments: List[Comment] = Nil)
     extends DocumentMap {
    def map = Map("id" -> id, "fromId" -> fromId, "fromName" -> fromName, "message" -> message, "fullUrl" -> fullUrl, "createdTime" -> createdTime, "updateTime" -> updateTime,   "likeCount" -> likeCont,
     "comments" -> comments)
  }

这就是我如何对数据进行索引(现在我只能索引单个项目),

    val test   =jsonValue(0).as[Post]


  client.execute {
    index into "posts/test"  doc  test
  }

我有两个问题

1.我应该在索引之前将属性注释映射为嵌套吗?因为现在所有列表都被索引为单个字符串。

2.如何索引帖子对象列表?现在我只能索引单个对象。

溶液

1.第一个也是非常重要的一个包装索引之前的映射。

2.使用那样的批量索引。

val ops = for (j <- jsonValue) yield index into "posts/test" doc j.as[Post] 

client.bulk(ops: _*)

感谢 三木

1 个答案:

答案 0 :(得分:0)

您可以创建映射并将注释字段设置为嵌套的类型。然后,所有评论字段都将被正确编入索引。默认情况下,它应该使用内部类型来平整字段,这样如果注释有一个名为author的字段,则所有作者将被组合在一起。

要索引多个文档,请使用批量API。从测试中:

client bulk( index into "transport/air" id 1 fields "company" -> "ba", index into "transport/air" id 2 fields "company" -> "aeroflot", index into "transport/air" id 3 fields "company" -> "american air", index into "transport/air" id 4 fields "company" -> "egypt air" )