Qual é a maneira correta de obter resultados de solrj usando Solr Suggester?
Este é o meu pedido:
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);
No entanto, achei extremamente difícil obter a resposta. A maneira como obtive a resposta é com isso:
NamedList obj = (NamedList)((Map)response.getResponse().get("suggest")).get("mySuggester"); SimpleOrderedMap obj2 = (SimpleOrderedMap) obj.get("So"); List obj3 = (List) obj2.get("suggestions");
Isso parece assumir muito sobre os objects que estou recebendo da resposta e será difícil prever erros.
Existe uma maneira melhor e mais limpa do que isso?
Em novas versões tem uma SuggesterResponse:
A melhor opção é obtê-lo como List, abaixo o código funcionou para mim
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 types=response.getSuggesterResponse().getSuggestedTerms().get("infixSuggester"); System.out.println(types); } catch (SolrServerException | IOException e) { e.printStackTrace(); }
Você pode obter as sugestões através do SpellCheckResponse
, fazendo o seguinte
SpellCheckResponse spellCheckResponse=response.getSpellCheckResponse();
Confira este link para mais detalhes