2013-01-23 11 views
5

Ich habe die verwandten Fragen auf dieser Seite durchgelesen, aber keine relevante Lösung gefunden.Facettieren mit SolrJ und Solr4

Wenn mein Solr4 Index verwendet eine HTTP-Anforderung des

&facet=true&facet.field=country 

Antwortformular Abfrage enthält alle verschiedenen Ländern zusammen mit Zählungen pro Land.

Wie kann ich diese Informationen mit SolrJ erhalten? Ich habe versucht, die folgenden, aber es gibt nur Gesamtzählungen in allen Ländern, nicht pro Land:

solrQuery.setFacet(true); 
solrQuery.addFacetField("country"); 

Die folgende zu funktionieren scheint, aber ich will nicht vorher alle Gruppierungen explizit festgelegt haben:

solrQuery.addFacetQuery("country:usa"); 
solrQuery.addFacetQuery("country:canada"); 

Zweitens bin ich nicht sicher, wie Sie die Facettendaten aus dem QueryResponse-Objekt extrahieren.

So zwei Fragen:

1) Mit SolrJ wie kann ich auf einem Feld Facette und geben die Gruppierungen, ohne explizit die Gruppen zu spezifizieren?

2) Mit SolrJ, wie kann ich die Facettendaten aus dem QueryResponse-Objekt extrahieren?

Danke.

Update:

Ich habe auch versucht, etwas Ähnliches zu Sergey Antwort (unten).

Der obige Code zeigt ffList mit size = 1 und die Schleife durchläuft 1 Iteration. In der Ausgabe ffname = "country" und ffcount ist die Gesamtzahl der Zeilen, die der ursprünglichen Abfrage entsprechen.

Es gibt hier keine länderspezifische Aufschlüsselung.

Ich sollte erwähnen, dass ich auf dem gleichen SolrQuery-Objekt auch addField und addFilterQuery aufrufen. Nicht sicher, ob diese Auswirkungen Facettierung:

solrQuery.addField("user-name"); 
solrQuery.addField("user-bio"); 
solrQuery.addField("country"); 
solrQuery.addFilterQuery("user-bio:" + "(Apple OR Google OR Facebook)"); 

Update 2:

Ich glaube, ich habe es, wieder auf das, was Sergey sagte unten. Ich habe das List-Objekt mit FacetField.getValues ​​() extrahiert.

In dem obigen Code entspricht die Label-Variable jeder Facettengruppe, und count ist die entsprechende Anzahl für diese Gruppierung.

Antwort

7

Eigentlich müssen Sie nur Facette Feld setzen und Facette (überprüfen SolrJ Quellcode) aktiviert werden:

solrQuery.addFacetField("country"); 

Wo Sie Facette Informationen sah?Es muss in QueryResponse.getFacetFields (getValues.getCount)

+0

Danke Sergey. Ich habe meine obige Frage aktualisiert, um den von Ihnen erwähnten Ansatz zu berücksichtigen. –

1

Im solr Antwort Sie QueryResponse.getFacetFields() verwenden sollten List von FacetFields unter denen Figur „Land“ zu bekommen. so „Land“ ist idenditfied von QueryResponse.getFacetFields().get(0)

Sie iteriert dann über sie List von Count Objekte erhalten mit

QueryResponse.getFacetFields().get(0).getValues().get(i) 

und Wertnamen von Facette erhalten mit QueryResponse.getFacetFields().get(0).getValues().get(i).getName() und das entsprechende Gewicht mit

QueryResponse.getFacetFields().get(0).getValues().get(i).getCount()