每当我尝试searchHit.sourceAsString()
或searchHit.getSourceAsString()
时,我都会回复null
。但是,如果我尝试searchHit.getFields()
- >它会给我一个Map[String, SearchHitField]
,然后我可以从中获得必要的字段 - 我不想这样做。那是因为我想使用Lift-json
库来解析我案例类中json
来自searchHi
的“if if”{{1}}字符串。有什么想法吗?
答案 0 :(得分:4)
searchHit.sourceAsString()
, null
将返回_source
。
如果您在映射中禁用了它(在这种情况下您必须启用它),或者您指定要返回的其他字段,则会发生这种情况。
特别是,您必须将_source
传递给SearchRequestBuilder中的字段列表。默认字段列表为[_source]
,因此,如果您未指定任何其他字段,则会返回_source
,但如果您指定其他字段,则还必须添加_source
答案 1 :(得分:0)
在scala中包含弹性搜索电话searchHit.sourceAsString()
。选项如下:Option(searchHit.sourceAsString())
。您可以根据需要对此进行撰写或进行模式匹配。
基本上,当你在一个Option中包装null时,它会为你提供scala.None类型。您可以尝试REPL会话。
如果你想写作,你可以这样做:
val jvalOpt: Option[net.liftweb.json.JValue] = Option(searchHit.sourceAsString()).map(net.liftweb.json.parse(_))
或者如果你想模式匹配,那么你可以这样做:
val jval = Option(searchHit.sourceAsString()) match {
case None => // todo
case Some(s) => net.liftweb.json.parse(s)
}