10 Tipps für bessere Suchanfragen in Apache Solr

Apache Solr ist im Herzen eine Open-Source-Suchmaschine, aber es ist viel mehr als das. Es ist eine NoSQL-Datenbank mit Transaktionsunterstützung. Es handelt sich um eine Dokumentendatenbank, die SQL-Unterstützung bietet und diese verteilt ausführt.

Zuvor habe ich Ihnen gezeigt, wie Sie eine Sammlung erstellen und in Solr laden. Sie können diese Sammlung jetzt laden, wenn Sie dies zuvor noch nicht getan haben. (Vollständige Offenlegung: Ich arbeite für Lucidworks, das viele der wichtigsten Mitarbeiter des Solr-Projekts beschäftigt.)

In diesem Beitrag zeige ich Ihnen weitere 10 Dinge, die Sie mit dieser Sammlung tun können:

1. Filtern Sie Abfragen

Betrachten Sie diese Abfrage:

//localhost:8983/solr/ipps/select?fq=Provider_State:NC&indent=on&q=*:*&wt=json

Auf den ersten Blick sieht diese Abfrage ähnlich aus, als hätte ich es gerade getan q=Provider_State:NC. Filterabfragen geben jedoch nur IDs zurück und haben keinen Einfluss auf die Punktzahl. Filterabfragen werden ebenfalls zwischengespeichert. Dies ist ein guter Weg, um die relevantesten q=blue suedein department:footwearim Gegensatz zu department:clothingoder zu finden department:music.

2. Facettieren

Versuchen Sie diese Abfrage:

//localhost:8983/solr/ipps/select?facet=on&facet.field=Provider_State&facet.limit=-1&indent=on&q=*:*&wt=json

Folgendes wird oben zurückgegeben:

ICH WÜRDE

Durch Facettieren erhalten Sie (unter anderem) die Anzahl Ihrer Kategorien. Wenn Sie eine Einzelhandelswebsite implementieren, stellen Sie auf diese Weise Kategorien und Kategorienzahlen für Abteilungen oder andere Arten der Aufteilung Ihres Inventars bereit.

3. Facettenfacettierung

Fügen Sie dies einer Abfragezeichenfolge hinzu: facet.interval=Average_Total_Payments&facet.interval.set=[0,1999.99]&facet.interval.set=[2000,2999.99]&facet.interval.set=[3000,3999.99]&facet.interval.set=[4000,4999.99]&facet.interval.set=[5000,5999.99]&facet.interval.set=[6000,6999.99]&facet.interval.set=[7000,7999.99]&&facet.interval.set=[8000,8999.99]&facet.interval.set=[9000,10000]

Du wirst kriegen:

Diese Bereichsfacettierung kann dabei helfen, ein numerisches Feld in Kategorien von Bereichen zu unterteilen. Wenn Sie jemandem helfen, einen Laptop im Bereich von 2.000 bis 3.000 US-Dollar zu finden, ist dies das Richtige für Sie. Sie können eine ähnliche Abfrage durchführen, ohne die Bereiche fest zu codieren, indem Sie stattdessen Folgendes tun:facet.range=Average_Total_Payments&facet.range.gap=999.99&facet.range.start=2000&facet.range.end=10000

4. DocValues

Stellen Sie in Ihrem Schema sicher, dass das docValuesAttribut für Felder ausgewählt ist, auf die Sie facettieren. Dies optimiert das Feld für diese Art von Suchen und spart zur Abfragezeit Speicherplatz, wie in diesem schema.xml-Auszug gezeigt:

5. Pseudofelder

Sie können Operationen an Ihren Daten ausführen und einen Wert zurückgeben. Versuche dies:

//localhost:8983/solr/ipps/select?fl=Provider_Name,%20Average_Total_Payments,price_category:if(min(0,sub(Average_Total_Payments,5000)),%22inexpensive%22,%22expensive%22)&indent=on&q=*:*&rows=10&wt=json

In diesem Beispiel werden einige der in Solr integrierten Funktionen verwendet, um Anbieter basierend auf den durchschnittlichen Gesamtzahlungen als teuer oder kostengünstig einzustufen. Ich habe price_category:if(min(0,sub(Average_Total_Payments,5000)),"inexpensive","expensive")die floder Feldliste zusammen mit zwei anderen Feldern eingefügt.

6. Parser abfragen

Mit defType können Sie einen der Abfrageparser von Solr auswählen. Der Standard-Standard-Abfrageparser eignet sich sehr gut für bestimmte maschinengenerierte Abfragen. Solr verfügt jedoch auch über die Parser Dismax und eDismax, die für normale Benutzer besser geeignet sind: Sie können auf eine davon am unteren Rand des Administrator-Abfragebildschirms klicken oder Ihrer Abfragezeichenfolge hinzufügen defType=dismax. Der Dismax-Parser liefert im Allgemeinen bessere Ergebnisse für vom Benutzer eingegebene Abfragen, indem er das "Disjunktionsmaximum" oder das Feld mit den meisten Übereinstimmungen ermittelt und zur Punktzahl hinzufügt.

7. Boosten

Wenn Sie suchen Provider_State:AL^5 OR Provider_State:NC^10, werden die Ergebnisse in North Carolina höher bewertet als die Ergebnisse in Alabama. Sie können dies in Ihrer Abfrage ( q="") tun . Dies ist ein wichtiger Weg, um die zurückgegebenen Ergebnisse zu manipulieren.

8. Datumsbereiche

Obwohl die Beispieldaten keine Datumsbereichssuche unterstützen, würden sie in diesem Fall wie folgt formatiert timestamp_dt:[2016-12-31T17:51:44.000Z TO 2017-02-20T18:06:44.000Z]. Solr unterstützt Datumstypfelder sowie Datumstypsuche und -filterung.

9. TF-IDF und BM25

Der ursprüngliche Bewertungsmechanismus, den Solr verwendet hat (um festzustellen, welche Dokumente für Ihren Suchbegriff relevant waren), heißt TF-IDF für "Termhäufigkeit gegenüber der inversen Dokumenthäufigkeit". Es gibt zurück, wie häufig ein Begriff in Ihrem Feld oder Dokument vorkommt und wie häufig dieser Begriff insgesamt in Ihrer Sammlung vorkommt. Das Problem bei diesem Algorithmus besteht darin, dass das 100-malige Auftreten von "Game of Thrones" in einem 10-seitigen Dokument gegenüber dem 10-maligen Auftreten in einem 10-seitigen Dokument das Dokument nicht 10-mal relevanter macht. Es macht es mehr relevant , aber nicht 1 0 mal mehr relevant.

BM25 glättet diesen Prozess und lässt Dokumente effektiv einen Sättigungspunkt erreichen, wonach die Auswirkungen zusätzlicher Ereignisse gemindert werden. Neuere Versionen von Solr verwenden standardmäßig alle BM25.

10. debugQuery

In der Admin-Abfragekonsole können Sie debugQuery überprüfen, um debugQuery=ones der Solr- Abfragezeichenfolge hinzuzufügen . Wenn Sie die Ergebnisse überprüfen, finden Sie diese Ausgabe:

Sie sehen unter anderem, dass der LuceneQParser (der Name des Standard-Abfrageparsers) verwendet wird und darüber hinaus, wie jedes Ergebnis bewertet wurde. Sie sehen den BM25-Algorithmus selbst und wie sich Boosts auf die Wertung auswirken. Wenn Sie versuchen, Ihre Suche zu debuggen, ist dies ein sehr wertvolles Tool!

Diese zehn Aspekte von Solr helfen mir sicherlich, wenn ich Solr zum Suchen und Optimieren meiner Ergebnisse verwende.