2014-01-15 2 views
0

Каждый раз, когда я пытаюсь сделать searchHit.sourceAsString() или searchHit.getSourceAsString(), я получаю null назад. Но если я попробую searchHit.getFields() -> он даст мне Map[String, SearchHitField], а затем я смогу получить от него необходимые поля - что я не хочу делать. Это потому, что я хочу использовать библиотеку Lift-json для анализа «если получен» json строка из searchHi t в моем классе. Есть идеи?Как получить строку json для поискаHit?

ответ

0

Оберните эластичный поисковый вызов searchHit.sourceAsString() в scala.Option что-то вроде: Option(searchHit.sourceAsString()). Вы можете скомпоновать это или сделать шаблон, как хотите.

По существу, когда вы обертываете нуль в опции, он дает вам 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

Я ВСЕГДА получаю null обратно, когда я выполняю поискHit.getSourceAsString(). Мой оригинальный вопрос - не научиться разбираться, а как получить json для searchHit. –

+0

Я неправильно понял вопрос. @ Ответ knutwalker кажется правильным. –

4

searchHit.sourceAsString() вернется null, если вы этого не сделаете запросите поле _source.

Это происходит, если вы отключили его в своем сопоставлении (в этом случае вы должны включить его), или если вы укажете другие поля для возврата.

В частности, вы должны передать _source в список полей в SearchRequestBuilder. Список полей по умолчанию - [_source], поэтому, если вы не укажете никаких других полей, вы получите свой _source, но если вы укажете другие поля, вы также должны добавить _source.

Смежные вопросы