2015-02-12 23 views
5

Qual è il modo corretto di ottenere risultati da solrj utilizzando Solr Suggester?Solrj con Solr Suggester

Questa è la mia richiesta:

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

Tuttavia ho trovato estremamente difficile ottenere la risposta. Il modo in cui ho ricevuto la risposta è con questo:

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

Questo sembra assumere un sacco sugli oggetti che sto ottenendo dalla risposta e sarà difficile anticipare gli errori.

C'è un modo migliore e più pulito di questo?

risposta

0

È possibile ottenere i suggerimenti tramite il SpellCheckResponse effettuando le seguenti

SpellCheckResponse spellCheckResponse=response.getSpellCheckResponse(); 

Scegli questa link per maggiori dettagli

+0

L'ho provato, non funziona. Non è un oggetto SpellCheckResponse. È un suggester https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=32604262 che penso sia diverso. – Ammar

1

migliore l'opzione è di ottenerla come lista, sotto il codice ha funzionato per me

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