Abfragen der Solr-Relevanzfunktion
Die Standard-Ranking-Funktion von Lucene verwendet Faktoren wie tf, idf und norm, um die Relevanzwerte zu berechnen.
Solr hat diese Faktoren jetzt als Funktionsabfragen bereitgestellt.
- docfreq(Feld,Begriff) gibt die Anzahl der Dokumente zurück, die den Begriff im Feld enthalten.
- termfreq(Feld,Begriff) gibt die Anzahl der Vorkommen des Begriffs in dem Feld für dieses Dokument zurück.
- idf(feld,begriff) gibt die inverse Dokumenthäufigkeit für den angegebenen Begriff zurück, wobei die Ähnlichkeit für das Feld verwendet wird.
- tf(feld,term) gibt den Termhäufigkeitsfaktor für den angegebenen Term zurück, wobei die Ähnlichkeit für das Feld verwendet wird.
- norm(field) gibt die im Index gespeicherte „Norm“ zurück, das Produkt aus dem Index-Zeit-Boost und dem Längen-Normalisierungsfaktor.
- maxdoc() gibt die Anzahl der Dokumente im Index zurück, einschließlich derer, die als gelöscht markiert sind, aber noch nicht bereinigt wurden.
- numdocs() gibt die Anzahl der Dokumente im Index zurück, ohne die Dokumente, die als gelöscht markiert sind, aber noch nicht bereinigt wurden.
Wir können diese neuen Funktionen nutzen, um eigene Ranking-Funktionen zu entwickeln und zu testen! Wenn wir zum Beispiel ein einfaches tf*idf für einen bestimmten Begriff benötigen, könnten wir die folgende Funktionsabfrage stellen (wenn Sie den Beispielserver von Solr mit indizierten Beispieldokumenten laufen haben, klicken Sie einfach auf den folgenden Link):
Um die Wiederholung des von uns verwendeten Begriffs (Text, Speicher) zu vermeiden, können wir das Feld und den Begriff in andere Abfrageparameter übertragen:
Mithilfe der neuen Fähigkeit von Solr, Abfragen nach beliebigen Funktionen zu sortieren, können wir nun eine Abfrage nach der Häufigkeit sortieren, mit der ein bestimmter Begriff in jedem Dokument vorkommt. Die folgende Abfrage sucht nach Dokumenten, die mit „DDR“ übereinstimmen, sortiert dann aber nach der Anzahl, wie oft „Speicher“ im Textfeld erscheint.
http://localhost:8983/solr/select/?fl=score,id&q=DDR&sort=termfreq(text,speicher) desc
Wir könnten auch die Funktion „norm“ verwenden, um zuerst nach dem längsten Feld zu sortieren. Dabei wird davon ausgegangen, dass es keine Index-Zeit-Boosts gab und die Norm daher nur der Standard-Längennormalisierungsf-Akteur ist.
http://localhost:8983/solr/select/?fl=score,id&q=DDR&sort=norm(text) asc
Angesichts der Fülle von Funktionsabfragen in Solr (einschließlich der neuen räumlichen Abfragen, die den Abstand zwischen Punkten zurückgeben) sind die Möglichkeiten nahezu unbegrenzt. Um dies auszuprobieren, benötigen Sie einen aktuellen Nightly-Build von Solr 4.0-dev oder Lucidworks Enterprise, unsere kommerzielle Version von Solr.