gpt4 book ai didi

scala - 当结果文档缺少字段时,Elastic4s搜索案例类示例错误

转载 作者:行者123 更新时间:2023-12-03 00:13:10 24 4
gpt4 key购买 nike

我一直在使用Elastic4s手册中的这个示例。在尝试检索没有在case类中指定字段的文档之前,它工作正常。

在本手册的示例中,假设一个结果仅包含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]

最佳答案

使用可选参数开发case class时,请使用 Option :

case class Character(name: String, location: Option[String])

Character("Tyrion Lannister", None)

然后,您所要做的就是修改数据提取器,如果找不到数据,则通过None选项:
val tyrion = Map("location" -> "King's Landing", "name" -> "Cersei Lannister")
val cersei = Map("father" -> "Tywin Lannister?", "name" -> "Cersei Lannister")
val jaime = Map("father" -> "Tywin Lannister", "location" -> "Tower of the Hand")
val characters = List(tyrion, cersei, jaime)

case class Character(name: String, location: Option[String])

characters.map(x => Character(x.getOrElse("name", "A CHARACTER HAS NO NAME"), x.get("location")))
characters.map(...)的结果是这样的:
res0: List[Character] = List(
Character(Cersei Lannister,Some(King's Landing)),
Character(Cersei Lannister,None),
Character(A CHARACTER HAS NO NAME NAME,Some(Tower of the Hand)))

RichSearchHit 的源代码中, sourceAsMap应该返回一个 Map对象:
def sourceAsMap: Map[String, AnyRef] = if (java.sourceAsMap == null) Map.empty else java.sourceAsMap.asScala.toMap

假设您使用的是 Map速记,则应该可以将代码转换为:
case class Character(name: String, location: Option[String])

implicit object CharacterHitAs extends HitAs[Character] {
override def as(hit: RichSearchHit): Character = {
Character(hit.sourceAsMap.getOrElse("name", "A CHARACTER HAS NO NAME"), hit.sourceAsMap.get("location")) }}

关于scala - 当结果文档缺少字段时,Elastic4s搜索案例类示例错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39026740/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com