Solr: wie man insgesamt eine Anzahl von Ergebnissen für gruppierte Abfrage mit dem Java-API
Habe ich Folgendes:
43 Dokumente indiziert in Solr
Wenn ich die Java-API eine Abfrage ohne Gruppierung, wie:
SolrQuery query = new SolrQuery("*:*");
query.setRows(10);
Kann ich das dann erhalten Sie die Zahl der übereinstimmenden Elemente wie folgt:
solrServer.query(query).getResults().getNumFound(); //43 in this case
Den getResults()
Methode gibt eine SolrDocumentList
Instanz, die enthält diesen Wert.
Wenn ich jedoch Gruppierung verwenden, so etwas wie:
query.set("group", "true");
query.set("group.format", "simple");
query.set("group.field", "someField");
Dann den obigen code für das abrufen von Abfrageergebnissen keine loger arbeiten (wirft NPE), und ich habe zu verwenden:
List<GroupCommand> groupCommands = solrServer.query(query).getGroupResponse().getValues();
List<Group> groups = groupCommand.getValues();
Group group = groups.get(groupIndex);
Ich nicht verstehen, wie dieser Teil des API, um die Anzahl von übereinstimmenden Dokumente (die 43 aus der nicht-gruppierungsabfrage oben). Zuerst dachte ich, dass mit der Gruppierung nicht mehr möglich ist, zu bekommen, aber ich habe bemerkt, dass wenn ich nicht eine ähnliche Abfrage in der Solr admin-Konsole, mit der selben Gruppierung und alles ist, gibt es die exakt gleichen Ergebnisse wie die Java-API und auch numFound=43
. So offensichtlich ist der verwendete code für die Konsole hat eine Möglichkeit zum abrufen dieser Wert auch bei der Gruppierung verwendet wird:
Meine Frage ist, wie bekomme ich die gesamte Anzahl von übereinstimmenden Dokumente, die für eine Abfrage mit Gruppierung erfolgt über Solr die Java-API?
InformationsquelleAutor Shivan Dragon | 2013-04-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Im Blick auf die Quelle für Gruppe, der zurückgegeben wird, von Ihrem
groups.get(groupIndex)
nennen, hat es eine getResults() Methode zurückgibt,SolrDocumentList. Die SolrDocumentList hat eine getNumFound () - Methode zurückgeben soll die Gesamtzahl, glaube ich...Sind, So sollten Sie in der Lage, dieses wie die folgenden:
Hoffe, das hilft.
Update: glaube ich, als OP erklärt, die Gruppe.getResults().getNumFound() liefert dann nur die Anzahl der Elemente in der Gruppe. Doch auf der GroupCommand es ist ein getMatches () - Methode, kann die entsprechende Anzahl, die gewünscht ist.
Ich glaube, Sie sind direkt nach Betrachtung der Kommentare für die Methode getResults. Bitte finden Sie in den aktualisierten Antworten.
Werd ich akzeptiere Ihre Antwort, weil es ist, was ich eigentlich bin gonna verwenden. Dies funktioniert für mich, da ich nur ein Feld zum gruppieren, und ich verwende die "einfache" Gruppe-format, und das Ergebnis nur ein GroupCommand mit nur einer Gruppe in der es am meisten. Für diese situation, entweder GroupCommand.getMatches oder Gruppe.getResults().getNumFound() zurück, die Gesamtzahl der Spiele. Vielen Dank für Ihre Mühe!
InformationsquelleAutor Paige Cook
Wenn Sie den ngroups-parameter auf true (default false) das liefert die Anzahl der Gruppen.
zB:
solrQuery.set("group.ngroups", true);
https://cwiki.apache.org/confluence/display/solr/Result+Gruppierung
diese können dann abgerufen werden, von Ihrer Reaktion GroupCommand mit:
int numGroups = tempGroup.getNGroups();
Zumindest war das mein Verständnis?
InformationsquelleAutor sonicscorpion