2017-01-16 9 views
0

Dieser Code gibt die ersten 10 Facette Artikel (von 200) für FieldX:SolrJ Gesamt Facetten ohne alle Facetten abrufen

query.setQuery("*:*"); 
    query.setFacet(true); 
    query.addFacetField("fieldx"); 
    query.setFacetLimit(10); 
    QueryResponse resp = solr.query(query); 
    System.out.println("tot="+resp.getResults().getNumFound()); 

Ich brauche die Gesamtzahl der Facetten Artikel (200 in diesem Fall zu erhalten), damit ich die Facettenmenge paginieren kann. resp.getResults().getNumFound() gibt die Gesamtzahl der Dokumente (31.000.000) zurück, nicht die Gesamtzahl der Facettenelemente.

Antwort

0

Sie müssen das facetField aus der Antwort abrufen und dann nach der Anzahl fragen. Zum Beispiel:

FacetField fieldxFacets = solrResponse.getFacetField("fieldx"); 
int countFacets = fieldxFacets.getValueCount(); 

Blick auf die FacetField code in GrepCode das ist, was Sie brauchen.

Um die Gesamtzahl der Facetten zurückzugeben, können Sie das Limit auf -1 (unbegrenzt) setzen. Sie sollten jedoch ein unteres Limit setzen, da ich kein Szenario sehe, in dem ein Benutzer tiefe Paginierungen auf Facetten ausführt.

+0

Dies funktioniert nicht, weil 'fieldxFacets.getValueCount()' die zurückgegebene Facettenzahl zurückgibt (in diesem Fall 10), nicht die gesamten Facetten. – Bruce

+0

Woher weißt du, dass du 200 Facetten hast? Wenn diese Methode nur 10 zurückgibt, aber bei 100% sicher ist, dass sie 200 sind, besteht die Möglichkeit, dass Sie das Limit festlegen. Versuchen Sie, das Limit mithilfe von facet.limit = -1 (unbegrenzt) festzulegen. – AR1

+0

Entschuldigung, ich kann in Ihrem Code sehen, dass Sie Facettenlimit 10 setzen, das ist Ihr Problem. Setzen Sie es auf -1, wenn Sie alle Facetten oder eine obere Grenze erhalten möchten, wenn Sie weniger anzeigen möchten – AR1