Spaß mit Solr-Funktionen
Solr verfügt schon seit langem über eine ganze Reihe von Funktionen zur Steigerung der Relevanz auf der Grundlage des Inhalts eines Feldes, aber ich war immer auf der Benutzerseite und nie auf der Seite der Autoren. Das heißt, zumindest bis vor kurzem. Diese Woche habe ich einem Artikel über die Verwendung von Lucene und Solr für die räumliche Suche den letzten Schliff gegeben. Im Rahmen dieses Artikels hatte ich die Gelegenheit, eine Reihe neuer Funktionen für Solr zu schreiben, darunter mehrere zur Berechnung der Entfernung zwischen zwei Punkten. Diese Funktionen sind:
- hsin und ghhsin (geohash-basierte Haversine) – Berechnen Sie den Haversine-Abstand (Großkreis) zwischen zwei Punkten auf einer Kugel
- Lp-Norm – d.h. die 1-Norm (Manhattan-Distanz), 2-Norm (Euklidisch), usw.
- Radiant/Grad Konverter
- Geohash-Konverter – konvertiert das Paar Breitengrad/Längengrad in einen Geohash-Wert.
Darüber hinaus hat Yonik Unterstützung für so ziemlich alle java.util.Math-Funktionen hinzugefügt, einschließlich Kosinus, Sinus, Tangens usw., so dass Solr jetzt wirklich über einige sehr bedeutende mathematische Fähigkeiten verfügt, die alle durch die bei einer Suche ausgewählten Werte unterstützt werden können. Ganz zu schweigen davon, dass sie auch zum Filtern verwendet werden können, wenn Sie den FunctionRangeQParser( kurzfrange ) verwenden.
Hier ein Beispiel für einige Solr-Anfragen, die ich für meinen Artikel erstellt habe:
http://localhost:8983/solr/select/?q={!func}recip(hsin(0.78, -1.6, lat_rad, lon_rad, 3963.205), 1, 1, 0)
http://localhost:8983/solr/select/?q=*:*&fq={!frange l=0 u=10}dist(2, 32, -79, lat, lon)
Im ersten Beispiel bewerte ich alle meine Dokumente auf der Grundlage der Großkreisdistanz von einem bestimmten Punkt auf dem Globus, während ich im zweiten Beispiel Dokumente auf der Grundlage der Distanz herausfiltere.
Ich habe auch gesehen, dass die Funktionen auf alle möglichen Arten verwendet werden. Ein Kunde nutzte sie sogar, um alternative Bewertungsmodelle zu simulieren, indem er die ExternalFileValueSource verwendete. Darüber hinaus können Sie mit diesen Funktionen auch die Genauigkeit von Dokumenten/Feldern erhöhen.
Bis jetzt war mir nie bewusst, wie einfach sie zu schreiben sind. Im Grunde nehmen Sie eine ValueSource auf, konvertieren sie in eine DocValues-Instanz, die Ihnen den Wert des Feldes für jedes Dokument liefert, und führen dann Ihre Berechnung durch. Schließlich registrieren Sie sie in der solrconfig.xml. Mehr dazu finden Sie im SolrPlugins-Wiki.
Schließlich sollten Sie Solr 1.5 im Auge behalten, denn ich habe die Idee, etwas hinzuzufügen, das ich vorläufig als Aggregationsfunktionen bezeichne und das meiner Meinung nach für mehr Business Intelligence-Anwendungen genutzt werden kann. Diese Aggregationsfunktionen wären eine bedeutende Erweiterung der StatsComponent von Solr und würden viel aussagekräftigere Berechnungen über Ergebnismengen ermöglichen.