Ho seguito le domande correlate su questo sito ma non ho trovato una soluzione pertinente.Sfaccettature con SolrJ e Solr4
Quando interrogare il mio indice Solr4 utilizzando una richiesta HTTP della forma
&facet=true&facet.field=country
la risposta contiene tutti i diversi paesi con conteggi per paese.
Come posso ottenere queste informazioni usando SolrJ? Ho provato quanto segue ma restituisce solo conteggi totali in tutti i paesi, non per paese:
solrQuery.setFacet(true);
solrQuery.addFacetField("country");
La seguente non sembra funzionare, ma io non voglio avere a impostare in modo esplicito tutti i raggruppamenti in anticipo:
solrQuery.addFacetQuery("country:usa");
solrQuery.addFacetQuery("country:canada");
In secondo luogo, non sono sicuro di come estrarre i dati facet dall'oggetto QueryResponse.
Quindi due domande:
1) Utilizzando SolrJ come posso sfaccettare su un campo e restituire i gruppi senza specificare esplicitamente i gruppi?
2) Utilizzo di SolrJ come è possibile estrarre i dati facet dall'oggetto QueryResponse?
Grazie.
Aggiornamento:
Ho anche provato qualcosa di simile alla risposta di Sergey (qui di seguito).
List<FacetField> ffList = resp.getFacetFields();
log.info("size of ffList:" + ffList.size());
for(FacetField ff : ffList){
String ffname = ff.getName();
int ffcount = ff.getValueCount();
log.info("ffname:" + ffname + "|ffcount:" + ffcount);
}
Il codice precedente mostra ffList con dimensione = 1 e il circuito passa attraverso 1 iterazione. Nell'output ffname = "country" e ffcount è il numero totale di righe che corrispondono alla query originale.
Non c'è una ripartizione per paese qui.
Devo menzionare che sullo stesso oggetto solrQuery sto anche chiamando addField e addFilterQuery. Non sono sicuro se questo ha un impatto sfaccettatura:
solrQuery.addField("user-name");
solrQuery.addField("user-bio");
solrQuery.addField("country");
solrQuery.addFilterQuery("user-bio:" + "(Apple OR Google OR Facebook)");
Aggiornamento 2:
Penso che ho avuto che, ancora una volta basati su ciò che ha detto Sergey sotto. Ho estratto l'oggetto List utilizzando FacetField.getValues ().
List<FacetField> fflist = resp.getFacetFields();
for(FacetField ff : fflist){
String ffname = ff.getName();
int ffcount = ff.getValueCount();
List<Count> counts = ff.getValues();
for(Count c : counts){
String facetLabel = c.getName();
long facetCount = c.getCount();
}
}
Nel codice precedente la variabile dell'etichetta corrisponde ciascun gruppo sfaccettatura e conteggio è il conteggio corrispondente a tale raggruppamento.
Grazie Sergey. Ho aggiornato la mia domanda sopra per includere l'approccio che menzioni. –