2014-01-15 194 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