2014-01-15 163 views
0

每次我尝试做searchHit.sourceAsString()searchHit.getSourceAsString(),我得到null回来。但如果我尝试searchHit.getFields() - >它会给我一个Map[String, SearchHitField],然后我可以从它那里得到必要的字段 - 我不想这样做。那是因为我想用Lift-json库解析“如果获得”json字符串从searchHi吨在我的案例类。有任何想法吗?如何获取searchHit的json字符串?

回答

0

将弹性搜索调用searchHit.sourceAsString()包装在scala中。选项如下:Option(searchHit.sourceAsString())。您可以撰写或根据需要进行模式匹配。

本质上,当你在一个选项中包装null时,它会给你scala.None type back。你可以试试你的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) 
} 
+0

当我执行searchHit.getSourceAsString()时,总是返回null。我原来的问题不是学习如何解析,而是如何获得searchHit的json。 –

+0

我误解了这个问题。 @ knutwalker的答案似乎是正确的。 –

4

searchHit.sourceAsString()将返回null如果你不这样做请求字段_source

如果您在映射中禁用它(在这种情况下必须启用它),或者指定了其他字段以返回,则会发生这种情况。

特别是,您必须将_source传递到您的SearchRequestBuilder中的字段列表。默认字段列表为[_source],因此如果您未指定任何其他字段,则会返回_source,但如果指定了其他字段,则还必须添加_source