Verschachtelte Abfragen in Solr

Die Möglichkeit, einen beliebigen Abfragetyp innerhalb eines anderen Abfragetyps zu verschachteln, ist eine nützliche Funktion, die vor einiger Zeit still…

Die Möglichkeit, einen beliebigen Abfragetyp innerhalb eines anderen Abfragetyps zu verschachteln, ist eine nützliche Funktion, die vor einiger Zeit still und heimlich zu Solr hinzugefügt wurde, zusammen mit der Unterstützung für Abfrageparser-Plugins zur Unterstützung verschiedener Abfragetypen. Ich bin endlich dazu gekommen, verschachtelte Abfragen für den Funktionsabfrageparser zu reparieren und dachte mir, dass es höchste Zeit war, verschachtelte Abfragen zu dokumentieren, zusammen mit der LocalParams-Syntax, die es erlaubt, Metadaten zu einem Abfrageparameter hinzuzufügen oder sogar den Typ einer Abfrage zu ändern (d.h. welcher Abfrageparser zum Parsen des Abfrage-Strings verwendet wird). Das könnte Sie auch interessieren: Optimierung der Auffindbarkeit in Lucene und Solr oder das Solr Referenzhandbuch.

Verschachtelte Abfragen in der Lucene-Syntax

Um eine Abfrage eines anderen Typs in einen Lucene/Solr-Abfrage-String einzubetten, verwenden Sie einfach den magischen Feldnamen _query_. Das folgende Beispiel bettet eine Lucene-Abfrage vom Typ:poems in eine andere Lucene-Abfrage ein:

text:"roses are red" AND _query_:"type:poems"

Dies ist natürlich für sich genommen nicht sehr nützlich, aber in Verbindung mit dem Query Parser Framework und lokalen Parametern, die es uns ermöglichen, die Abfragetypen zu ändern, wird es sehr mächtig. Das folgende Beispiel bettet eine DisMax-Abfrage in eine normale Lucene-Abfrage ein:

text:hi  AND  _query_:"{!dismax qf=title pf=title}how now brown cow"

Außerdem können wir in der Syntax von local params das Defererencing von Parametern verwenden, um es dem Frontend zu erleichtern, die Anfrage zusammenzustellen:

&q=text:hi  AND  _query_:"{!dismax qf=title pf=title v=$qq}
&qq=how now brown cow

Verschachtelte Abfragen in der Funktionsabfragesyntax

Dieser Teil war früher defekt und ist erst in Solr 1.4 oder höher behoben/verfügbar. Sie können die Funktion query() verwenden, um jede andere Art von Abfrage in eine Funktionsabfrage einzubetten und Berechnungen mit den von dieser Abfrage zurückgegebenen Relevanzwerten durchzuführen. Einige Beispiele aus dem Solr-Wiki finden Sie hier.

Reine verschachtelte Abfrage

Es gibt auch ein Parser-Plugin für verschachtelte Abfragen, mit dem Sie reine verschachtelte Abfragen erstellen können. Ist eine verschachtelte Abfrage ohne eine enthaltende Abfrage überhaupt nützlich? Überraschenderweise ja, denn sie ermöglicht eine weitere Zerlegung von Abfrageanfragen. Mit der folgenden Abfrage kann der Kunde beispielsweise auf einfache Weise angeben, dass er eine Art Aktualitätserhöhung in die Relevanzbewertung einfließen lassen möchte, während er den genauen Abfragetyp der Solr-Serverkonfiguration überlässt (über die Suchhandler-Vorgaben in solrconfig.xml). Die Client-Abfrage würde die Erhöhungsabfrage als $datefunc angeben:

q=how now brown cow&bq={!query v=$datefunc}

Und die Standardeinstellungen für den Handler in solrconfig.xml würden die eigentliche Definition von datefunc als Funktionsabfrage enthalten:

<lst name="defaults">
   <str name="datefunc">{!func}recip(rord(date),1,1000,1000)</str>
   [...]

Dieselbe Idee könnte verwendet werden, um einem Kunden zu ermöglichen, zwischen komplexen Filtern zu wechseln, ohne dass er angeben muss, was diese Filter sind. Ohne den verschachtelten Abfrageparsertyp wäre es nur möglich, den Abfragewert an einer separaten Stelle (über local params v=$param) anzugeben, nicht aber den Typ selbst.

Die Zukunft

In Solr 5.5 (über SOLR-839) wurde ein XML Query Parser hinzugefügt, mit dem beliebig komplexe Lucene-Abfragen in XML ausgedrückt werden können. Da die Anzahl der Abfrageparser wächst, wird es immer wichtiger, dass Sie sie mischen, anpassen und verschachteln können. Eine der ersten Erweiterungen des XML-Query-Parsers sollte natürlich die Einbindung verschachtelter Abfragen sein! Die Unterklassen von QParserPlugin zeigen alle derzeit für Solr verfügbaren Abfrageparser. Wenn Sie den gewünschten Abfrageparser nicht finden, können Sie Ihren eigenen erstellen und ihn über solrconfig.xml registrieren!

Foto mit freundlicher Genehmigung von Lori L. Stalteri (Flickr). Solr-Logo hinzugefügt.

You Might Also Like

Vom Suchunternehmen zum praktischen KI-Pionier: Unsere Vision für 2025 und darüber hinaus

CEO Mike Sinoway gibt Einblicke in die Zukunft der KI und stellt...

Read More

Wenn KI schief geht: Fehlschläge in der realen Welt und wie man sie vermeidet

Lassen Sie nicht zu, dass Ihr KI-Chatbot einen 50.000 Dollar teuren Tahoe...

Read More

Lucidworks Kernpakete: Branchenoptimierte KI-Such- und Personalisierungslösungen

Entdecken Sie unsere umfassenden Core Packages, die Analytics Studio, Commerce Studio und...

Read More

Quick Links