0

Scala クライアント elastic4s を使用して、ElasticSearch へのインデックス作成を開始したいクラスがあります。ドキュメントを挿入できるように DocumentMap を拡張しました。String、Int などの単純な値は機能していますが、別のクラスのリストを取得して正しくマップできないようです。

ドキュメントは次のようになります。

case class AThing(UserName: String, Comment: String, Time: String) 
extends  DocumentMap { 
  override def map: Map[String, Any] = Map(
   "UserName" -> UserName,
   "Comment" -> Comment,
   "Time" -> Time
  )
}

case class ThingsThatHappened(Id: String, Things: Seq[AThing] = Nil) 
extends DocumentMap {
  override def map: Map[String, Any] = Map(
    "Id" -> Id,
    "Things" ->  Things
  )
}

それはelasticsearch内でIdフィールドを適切にマップしますが、ドキュメントがelasticsearchに挿入されると、これに似た誤った値を取得します:

List(AThing(id_for_the_thing,user_name_a,typed_in_comment,2015-03-12))

明らかにこれは間違っており、elasticsearch に挿入されると、次のような JSON 構造に似たものが期待されます。

"events" : [
   {
     "UserName" :"user_name_a", 
     "Comment": "typed_in_comment", 
     "Time": "2015-03-12"
   }
]

Elastic4sを使用してデータにインデックスを付けるときに、複雑な型の配列をマップする方法を知っている人はいますか?

4

2 に答える 2

0

まず、elastic4s でインデックスを作成する必要があります。私はあなたがこれをしたと仮定します。

 client.execute {
  create index "myIndex" mappings (
    "AThings" as(
      "UserName" typed StringType,
      "Comemnt" typed StringType,
      "Time" typed StringType,
      )
    )
}

このインデックスを作成すると、ケース クラスを直接これに入れることができます。

val aThings = AThings("username","comment","time")
client.execute {index into "myIndex/AThings" doc aThings}
于 2015-03-30T14:13:48.390 に答える