Fusion plus Solr Suggesters machen die Suche intuitiver
Die Suchkomponente Solr Suggester wurde bereits in diesem Blog in dem Beitrag Solr-Suggester von Solr-Committer Erick Erickson. In diesem Beitrag…
Die Suchkomponente Solr Suggester wurde bereits in diesem Blog in dem Beitrag Solr-Suggester von Solr-Committer Erick Erickson. In diesem Beitrag wird gezeigt, wie Sie eine Solr Suggester-Komponente zu einer Fusion-Abfrage-Pipeline hinzufügen, um die Art von Autovervollständigungsfunktionalität bereitzustellen, die von einer modernen Suchanwendung erwartet wird.
Mit automatischer Vervollständigung meinen wir die vertrauten Dropdown-Listen unter einem Suchfeld, die wahrscheinliche Wörter oder Ausdrücke vorschlagen, während Sie tippen. Mit den FST-basierten Suggestoren von Solr ist dies ganz einfach möglich. FST steht für „Finite-State-Transducer“. Die zugrundeliegende Mechanik eines FST ermöglicht eine annähernde Übereinstimmung der Eingaben, was bedeutet, dass die automatische Vorschlagsfunktion auch dann funktioniert, wenn die Eingaben Tippfehler oder falsche Schreibweisen enthalten. Die Suggestoren von Solr geben bei einer Übereinstimmung das gesamte Feld zurück, so dass es möglich ist, ganze Titel oder Phrasen auf der Grundlage nur der ersten Buchstaben vorzuschlagen.
Die Daten in diesem Beispiel stammen aus den Daten, die das Movie Tweetings Projekt zwischen 2013 und 2016 gesammelt hat. Eine Teilmenge dieser Daten wurde zu einer CSV-Datei verarbeitet, die aus einer Zeile pro Film besteht, mit Spalten für eine eindeutige ID, den Titel, das Erscheinungsjahr, die Anzahl der gefundenen Tweets und die durchschnittliche Bewertung in den Tweets:
id,title,year,ct,rating ... 0076759,Star Wars: Episode IV - A New Hope,1977,252,8.61111111111111 0080684,Star Wars: Episode V - The Empire Strikes Back,1980,197,8.82233502538071 0086190,Star Wars: Episode VI - Return of the Jedi,1983,178,8.404494382022472 1185834,Star Wars: The Clone Wars,2008,11,6.090909090909091 2488496,Star Wars: The Force Awakens,2015,1281,8.555815768930524 ...
Nachdem ich diese Daten in Fusion geladen habe, verfüge ich über eine Sammlung namens „Filme“. Der folgende Screenshot zeigt das Ergebnis einer Suche nach dem Begriff „Star Wars“.
Das Suchergebnisfenster zeigt die Ergebnisse für die Suchanfrage „Star Wars“, sortiert nach Relevanz (d.h. beste Übereinstimmung). Obwohl alle Filmtitel das Wort „Star Wars“ enthalten, beginnen sie nicht alle mit diesem Wort. Wenn Sie versuchen, einem Suchfeld eine automatische Vervollständigung hinzuzufügen, sollten die Ergebnisse die ursprüngliche Anfrage vervollständigen. Im obigen Beispiel ist die zweitbeste Übereinstimmung in einem Szenario mit Autovervollständigung überhaupt keine Übereinstimmung. Anstatt den standardmäßigen Solr „select“-Handler für die Suche zu verwenden, können wir einen FST-Suggestor einfügen, der uns nicht nur die automatische Vervollständigung, sondern auch die unscharfe Vervollständigung durch die Magie der FSTs bietet.
Fusion-Sammlungen sind Solr-Sammlungen, die von Fusion verwaltet werden. Um der Sammlung „Filme“ einen Lucene/Solr-Suggester hinzuzufügen, müssen Sie die Solr-Konfigurationsdateien gemäß dem im Blogpost „Solr Suggester“ beschriebenen Verfahren bearbeiten:
- ein Feld mit dem richtigen Analysator in der Datei definieren
schema.xml
- Definieren Sie einen Anfrage-Handler für das automatische Ausfüllen in der Datei
solrConfig.xml
Fusion sendet Suchanfragen an Solr über die Fusion Query Pipeline Solr Query Stage. Daher ist es auch notwendig, eine Solr Query Stage zu konfigurieren, um auf den neu konfigurierten Suggest Request Handler zuzugreifen.
Die Fusion-Benutzeroberfläche bietet Werkzeuge zur Bearbeitung von Solr-Konfigurationsdateien. Diese sind über den Abschnitt „Konfiguration“ im Bereich „Home“ der Sammlung verfügbar, den Sie in der linken Spalte im obigen Screenshot sehen. Wenn Sie auf die Option „Solr Config“ klicken, werden die verfügbaren Konfigurationsdateien für die Sammlung „movies“ angezeigt:
Wenn Sie auf die Datei schema.xml
klicken, öffnet sich ein Bearbeitungsfenster. Ich muss einen Feldtyp definieren und angeben, wie der Inhalt dieses Feldes bei der Erstellung der von der Suggester-Komponente verwendeten FSTs analysiert werden soll. Dazu kopiere ich die Felddefinition vom Ende des Blogposts „Solr Suggester“ hinein:
<!-- text field for suggestions, taken from: https://lucidworks.com/blog/2015/03/04/solr-suggester/ --> <fieldType name="suggestTypeLc" class="solr.TextField" positionIncrementGap="100"> <analyzer> <charFilter class="solr.PatternReplaceCharFilterFactory" pattern="[^a-zA-Z0-9]" replacement=" " /> <tokenizer class="solr.WhitespaceTokenizerFactory"/> <filter class="solr.LowerCaseFilterFactory"/> </analyzer> </fieldType>
Nachdem Sie auf die Schaltfläche „Speichern“ geklickt haben, zeigt die Fusion-Benutzeroberfläche die Meldung an: „Dateiinhalt gespeichert und Sammlung neu geladen“.
Als Nächstes bearbeite ich die Datei solrConfig.xml
, um eine Definition für die Suggester-Suchkomponente und den entsprechenden Request Handler hinzuzufügen:
Diese Konfiguration basiert auf dem Solr-Beispiel „techproducts“, das auf der Suggester-Konfigurationsdokumentation im Solr-Referenzhandbuch basiert. Die Suggest-Suchkomponente wird mit Parametern für den Namen und den Implementierungstyp des Suggesters, das zu analysierende Feld und den verwendeten Analyzer konfiguriert. Wir geben auch den optionalen Parameter weightField
an, der, falls vorhanden, ein zusätzliches Dokumentfeld zurückgibt, das für die Sortierung verwendet werden kann.
In diesem Beispiel lautet der Parameter field
movie_title_txt
. Der Parameter suggestAnalyzerFieldType
gibt an, dass der Text des Filmtitels mit dem Analysator analysiert wird, der für den Feldtyp suggestTypeLc
definiert wurde (im vorherigen Schritt der Datei schema.xml
für die Sammlung „movies“ hinzugefügt). Jeder Film verfügt über zwei Arten von Bewertungsinformationen: durchschnittliche Bewertung und Anzahl (Gesamtzahl der Bewertungen aus Tweets). Hier wird der Wert der durchschnittlichen Bewertung angegeben:
<searchComponent name="suggest" class="solr.SuggestComponent"> <lst name="suggester"> <str name="name">mySuggester</str> <str name="lookupImpl">FuzzyLookupFactory</str> <str name="dictionaryImpl">DocumentDictionaryFactory</str> <str name="storeDir">suggester_fuzzy_dir</str> <str name="field">movie_title_txt</str> <str name="weightField">rating_tf</str> <str name="suggestAnalyzerFieldType">suggestTypeLc</str> </lst> </searchComponent>
Einzelheiten finden Sie im Abschnitt Solr wiki Suggester seachComponent.
Die Konfiguration des Anfrage-Handlers gibt den Anfragepfad und die Suchkomponente an:
<requestHandler name="/suggest" class="solr.SearchHandler"> <lst name="defaults"> <str name="suggest">true</str> <str name="suggest.count">10</str> <str name="suggest.dictionary">mySuggester</str> </lst> <arr name="components"> <str>suggest</str> </arr> </requestHandler>
Einzelheiten finden Sie im Abschnitt Solr wiki Suggester requestHandler.
Nach jeder Dateibearbeitung werden die Sammlungskonfigurationen gespeichert und die Sammlung wird neu geladen, damit die Änderungen sofort wirksam werden.
Schließlich konfiguriere ich eine Pipeline mit einer Solr-Abfragestufe, die den Zugriff auf den Suggest Request Handler ermöglicht:
In Ermangelung einer Benutzeroberfläche mit der richtigen JS-Magie, um die automatische Vervollständigung in Aktion zu zeigen, senden wir einfach eine Anfrage an den Endpunkt, um zu sehen, wie sich der Suggest Request Handler von dem Standard Select Request Handler unterscheidet. Da ich bereits in der Fusion-Benutzeroberfläche angemeldet bin, fordere ich über die Browserleiste die URL an:
http://localhost:8764/api/apollo/query-pipelines/movies-default/collections/movies/suggest?q=Star%20Wars
Die Stärke des FST-Suggestters liegt in seiner Robustheit. Falsch geschriebene und/oder unvollständige Suchanfragen liefern immer noch gute Ergebnisse. Auch diese Suche liefert die gleichen Ergebnisse wie die obige Suche:
http://localhost:8764/api/apollo/query-pipelines/movies-default/collections/movies/suggest?q=Strr%20Wa
Unter der Haube von Lucidworks Fusion steckt Solr, und unter der Haube von Solr steckt Solr, das wiederum von Lucene angetrieben wird. Das ist eine Menge Leistung. Die Autovervollständigung für „Solr-fu“ ist „Solr-Fusion“!