У меня есть класс, который я хочу начать индексировать в ElasticSearch, используя эластичный клиент Scala. Я расширил DocumentMap, чтобы позволить мне вставлять документы. Простые значения, такие как String, Int и т. Д., Работают, но я не могу заставить список другого класса правильно отображать.Индексный массив Elasticsearch из другого класса
документы выглядят примерно так:
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
)
}
Он будет отображать поле Id штраф в elasticsearch, но затем я получаю неправильное значение, которое выглядит примерно так, когда документ вставляется в elasticsearch:
List(AThing(id_for_the_thing,user_name_a,typed_in_comment,2015-03-12))
Очевидно, что это не так, и я ожидал что-то родней этой структуры JSON, когда он был вставлен в elasticsearch, такие как:
"events" : [
{
"UserName" :"user_name_a",
"Comment": "typed_in_comment",
"Time": "2015-03-12"
}
]
Кто-нибудь знает способ сопоставления массива сложных типов при индексировании данных с помощью elastic4s?
спасибо. Жаль, что он не поддерживается из коробки. Я попробую хотя бы попробовать, поскольку он, похоже, дает мне лучший способ контролировать данные. – Darren
Достаточно легко добавить JsonIndexable, который делает это для вас как вспомогательный признак, может добавить это и PR? – monkjack
спасибо было бы здорово. Подойдет ли это ко всему этому, чтобы обнаружить внутренние вложенные типы, если я создам JsonIndexable.Или я не понимаю, что собирается сделать JsonIndexable? – Darren