如何获取searchHit的json字符串?

时间:2014-01-15 01:42:41

标签: json scala elasticsearch

每当我尝试searchHit.sourceAsString()searchHit.getSourceAsString()时,我都会回复null。但是,如果我尝试searchHit.getFields() - >它会给我一个Map[String, SearchHitField],然后我可以从中获得必要的字段 - 我不想这样做。那是因为我想使用Lift-json库来解析我案例类中json来自searchHi的“if if”{{1}}字符串。有什么想法吗?

2 个答案:

答案 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)
}