#java #solr
#java #solr #solrj
Вопрос:
Каков правильный способ получения результатов от solrj с помощью Solr Suggester?
Это моя просьба:
SolrQuery query = new SolrQuery();
query.setRequestHandler("/suggest");
query.setParam("suggest", "true");
query.setParam("suggest.build", "true");
query.setParam("suggest.dictionary", "mySuggester");
query.setParam("suggest.q", "So");
QueryResponse response = server.query(query);
Однако мне было чрезвычайно сложно получить ответ. Способ, которым я получил ответ, заключается в следующем:
NamedList obj = (NamedList)((Map)response.getResponse().get("suggest")).get("mySuggester");
SimpleOrderedMap obj2 = (SimpleOrderedMap) obj.get("So");
List<SimpleOrderedMap> obj3 = (List<SimpleOrderedMap>) obj2.get("suggestions");
Похоже, это многое говорит об объектах, которые я получаю из ответа, и будет трудно предвидеть ошибки.
Есть ли лучший и более чистый способ, чем этот?
Ответ №1:
В новых версиях есть SuggesterResponse:
Ответ №2:
Лучший вариант — получить его в виде списка, приведенный ниже код сработал для меня
HttpSolrClient solrClient = new HttpSolrClient(solrURL);
SolrQuery query = new SolrQuery();
query.setRequestHandler("/suggest");
query.setParam("suggest.q", "Ins");
query.setParam("wt", "json");
try {
QueryResponse response = solrClient.query(query);
System.out.println(response.getSuggesterResponse().getSuggestedTerms());
List<String> types=response.getSuggesterResponse().getSuggestedTerms().get("infixSuggester");
System.out.println(types);
} catch (SolrServerException | IOException e) {
e.printStackTrace();
}
Ответ №3:
Вы можете получить предложения с помощью SpellCheckResponse
, выполнив следующие действия
SpellCheckResponse spellCheckResponse=response.getSpellCheckResponse();
Проверьте эту ссылку для получения более подробной информации
Комментарии:
1. Я пробовал, это не работает. Это не объект проверки орфографии. Это подсказчик cwiki.apache.org/confluence/pages/… что, я думаю, отличается.