2015-02-12 15 views
5

Jaki jest poprawny sposób uzyskiwania wyników z solrj za pomocą Solr Suggester?Solrj z Solr Suggester

To moja prośba:

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); 

Jednak uważam, że niezwykle trudno jest uzyskać odpowiedź. Sposób Dostałem odpowiedź jest z tym:

NamedList obj = (NamedList)((Map)response.getResponse().get("suggest")).get("mySuggester"); 
SimpleOrderedMap obj2 = (SimpleOrderedMap) obj.get("So"); 
List<SimpleOrderedMap> obj3 = (List<SimpleOrderedMap>) obj2.get("suggestions"); 

To wydaje się zakładać, dużo o obiektach Dostaję od odpowiedzi i będzie trudne do przewidzenia błędów.

Czy jest lepszy i czystszy sposób niż to?

Odpowiedz

0

można uzyskać sugestie za pośrednictwem SpellCheckResponse wykonując następujące

SpellCheckResponse spellCheckResponse=response.getSpellCheckResponse(); 

sprawdzić ten link więcej szczegółów

+0

Próbowałem, to nie działa. To nie jest obiekt SpellCheckResponse. Jest to sugestia https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=32604262, która moim zdaniem jest inna. – Ammar

1

Najlepszy opcją jest pobranie go jako listy, poniżej kod zadziałał dla mnie

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(); 
    } 
Powiązane problemy