Verbesserungen bei der Solr-Ergebnisgruppierung / Feldzusammenlegung
Ich habe bereits die Ergebnisgruppierung von Solr vorgestellt, die auch als Field Collapsing bezeichnet wird. Sie begrenzt die Anzahl der…
Ich habe bereits die Ergebnisgruppierung von Solr vorgestellt, die auch als Field Collapsing bezeichnet wird. Sie begrenzt die Anzahl der angezeigten Dokumente für jede „Gruppe“, die normalerweise als die eindeutigen Werte in einem Feld oder einer Funktionsabfrage definiert ist.
Seitdem wurden eine Reihe von Fehlerkorrekturen, Leistungsverbesserungen und Funktionserweiterungen vorgenommen. Sie benötigen ein aktuelles Nightly-Build von Solr 4.0-dev oder das neu veröffentlichte Lucidworks Enterprise v1.6, unsere kommerzielle Version von Solr.
Funktionserweiterungen
Eine Verbesserung ist die Möglichkeit, über den Parameter group.query nach Abfrage zu gruppieren. Diese Funktion ist der facet.query sehr ähnlich, nur dass sie die Top-Dokumente abruft, die der Abfrage entsprechen, und nicht nur die Anzahl. Dies bietet viele Einsatzmöglichkeiten, z. B. die Abfrage der Top-Dokumente für bestimmte Gruppen oder die Definition von benutzerdefinierten Gruppen wie z. B. Preisspannen.
Eine weitere nützliche Funktion ist die Hinzufügung des Parameters group.main. Wenn Sie diesen auf true setzen, werden die Ergebnisse des ersten Gruppierungsbefehls als Hauptergebnisliste in einem reduzierten Antwortformat verwendet, das von älteren Clients verarbeitet werden kann.
Das gruppierte Antwortformat zum Beispiel liefert unter „gruppiert“ normalerweise stark strukturierte Ergebnisse.
…&q=solr+memory&group=true&group.field=manu_exact
"grouped":{
"manu_exact":{
"matches":6,
"groups":[{
"groupValue":"Apache Software Foundation",
"doclist":{"numFound":1,"start":0,"docs":[
{
"id":"SOLR1000",
"name":"Solr, the Enterprise Search Server",
"manu":"Apache Software Foundation"}]
}},
{
"groupValue":"Corsair Microsystems Inc.",
"doclist":{"numFound":2,"start":0,"docs":[
{
"id":"VS1GB400C3",
"name":"CORSAIR ValueSelect 1GB 184-Pin DDR SDRAM Unbuffered DDR 400 (PC 3200) System Memory - Retail",
"manu":"Corsair Microsystems Inc."}]
}},
[...]
Wenn wir der Anfrage group.main=true hinzufügen, erhalten wir eine viel vertrauter aussehende Antwort zurück (d.h. sie sieht aus wie eine normale nicht gruppierte Antwort):
…&q=solr+memory&group=true&group.field=manu_exact&group.main=true
"response":{"numFound":6,"start":0,"docs":[
{
"id":"SOLR1000",
"name":"Solr, the Enterprise Search Server",
"manu":"Apache Software Foundation"},
{
"id":"VS1GB400C3",
"name":"CORSAIR ValueSelect 1GB 184-Pin DDR SDRAM Unbuffered DDR 400 (PC 3200) System Memory - Retail",
"manu":"Corsair Microsystems Inc."},
Sie können auch den Parameter group.format=simple verwenden, um diese vereinfachte, abgeflachte Antwort innerhalb des normalen „gruppierten“ Abschnitts der Antwort auszuwählen.
Zu den weiteren Neuerungen gehören die Unterstützung von Debugging-Explain, Hervorhebung, Facettierung und die Möglichkeit, fehlende Werte im Gruppierungsfeld zu behandeln, indem alle Dokumente ohne Wert als Gruppe „null“ behandelt werden.
Leistungsverbesserungen
Es gab eine Reihe von Leistungsverbesserungen, darunter eine Verbesserung der Kurzschlusslogik… die Dokumente mit niedrigem Rang werden früher im Prozess abgeschnitten. Diese wichtige Optimierung führte zu einer etwa 9-fachen Beschleunigung des Zusammenfassens bei bestimmten Feldern!
Das Zusammenklappen von String-Feldern wurde mit speziellem Code weiter optimiert, der mit Ord-Werten anstelle von String-Werten arbeitet. Dadurch wurde die Leistung noch einmal verdoppelt!
Im Solr-Wiki finden Sie weitere Informationen zu allen Funktionen und Parametern der Ergebnisgruppierung.