Я работаю с этим примером из руководства Elastic4s. Он работает нормально, пока не попытается извлечь документ, который не имеет поля, указанного в классе case.Elastic4s поиск случай класс пример ошибки, когда в документе результата отсутствует поле
В этом примере из руководства, скажем, один результат имел только name
и отсутствовал поле location
. Это приведет к такой ошибке:
java.util.NoSuchElementException: key not found: location
Я ищу подходящий подход, чтобы иметь дело с результатами поиска, которые имеют разные поля.
Пример кода:
case class Character(name: String, location: String)
implicit object CharacterHitAs extends HitAs[Character] {
override def as(hit: RichSearchHit): Character = {
Character(hit.sourceAsMap("name").toString, hit.sourceAsMap("location").toString) }}
val resp = client.execute {
search in "gameofthrones"/"characters" query "kings landing"
}.await
val characters :Seq[Character] = resp.as[Character]
Я полностью согласен, что класс Option - это путь. Я рассматривал этот вопрос больше и проблема, и я считаю, что проблема заключается в исходной части ASMap и toString неявного объекта. hit.sourceAsMap ("location"). toString Объявление функции sourceAsMap передает данные из указанного поля в ответе Elasticsearch. Однако, когда результат Map.empty, я думаю, что метод toString является ошибкой. –
Обновление: я удалил toString и изменил ссылки в классе case на AnyRef. Я все еще получаю ключ, который не найден. Поэтому я вернулся, чтобы врываться в библиотеку для ответов. –
@JimHendricks Создает ли 'sourceAsMap()' объект Scala 'Map'? Если это так, и я думаю, что это так, вы можете называть 'get' на нем, который должен возвращать' None', если нет ключа: 'hit.sourceAsMap.get (" location "))' –