nach oben
indoqa. IT-Experten, die Dinge zu nachhaltigen Lösungen entwickeln.

Local Parameters in Apache Solr

Lokale Parameter (Local Parameters – oft kurz nur LocalParams) werden in Apache Solr verwendet, um einzelne Teile einer Anfrage mit zusätzlichen Parametern zu versehen. Durch diese Parameter ist es möglich, die Abarbeitung von Suchanfragen und die Berechnung von Facetten zu steuern.

Syntax und Verwendung

Lokale Parameter sind zusätzliche Werte, die einzelnen Teilen einer Suchanfrage zugeordnet werden. Die Bezeichnung “lokal” bezieht sich darauf, dass diese Werte immer nur für den jeweiligen Teil der Anfrage gelten und nicht automatisch überall greifen.

Die allgemeine Syntax von lokalen Parametern lautet

{!parameter1=wert1 parameter2=wert2 ... parameterN=wertN}

Dies wird unmittelbar vor das Argument des Anfragenteils gestellt, also z.B.:

q={!parameter1=wert1 parameter2=wert2}Suchbegriff

Die einzelnen Parameter werden durch Leerzeichen voneinander getrennt.
Soll ein Wert selbst ein Leerzeichen beinhalten, so muss dieser in Anführungszeichen geschrieben werden:

q={!parameter1="wert mit leerzeichen" parameter2=wert2}Suchbegriff

Kommt ein Anfragenteil mehrfach vor, wie z.B. bei FilterQueries, kann jeder seine eigenen lokalen Parameter erhalten:

q=*:*&fq={!parameter1=wert1}Suchbegriff&fq={!parameter2=wert2}Suchbegriff

Lokale Parameter bei Queries

Nehmen wir eine Suchanfrage mit einer Query wie zum Beispiel

q=Kunde Verkauf

Die Anfrage enthält die zwei Terme “Kunde” und “Verkauf”.
Da weder ein Suchfeld, noch eine Verknüpfungsoperation angegeben wurde, wird Solr für beide Fälle die Voreinstellung aus dem Schema verwenden. Wollen wir das nicht, müssen wir beides in die Query aufnehmen:

q=Beschreibung:(Kunde AND Verkauf)

Die Anfrage wird komplizierter und schwerer zu lesen.
Lokale Parameter können hier mehr Übersichtlichkeit bieten:

q={!q.op=AND df=Beschreibung}Kunde Verkauf

Die Query bleibt nun unverändert und alle zusätzlichen Angaben werden über lokale Parameter ausgedrückt.

Die Werte der lokalen Parameter können aber nicht nur direkt angegeben, sondern auch indirekt referenziert werden:

q={!q.op=$operator df=Beschreibung}Kunde Verkauf&operator=AND

Dadurch können Werte in verschiedenen Anfragenteilen gemeinsam verwendet werden, ohne diese überall wiederholen zu müssen.

Über den Parameter v (für value) können sogar die Suchbegriffe selbst als Parameterwert übergeben werden. In Kombination mit referenzierten Werten kann auch hier Redundanz eliminiert werden:

q={!v=$terms q.op=$operator df=Beschreibung}&operator=AND&terms=Kunde Verkauf

Lokale Parameter bei Facetten

Auch beim Facettieren können lokale Parameter verwendet werden, um die Ergebnisse zu beeinflussen.
Hier spielen vor allem sogenannte Multi-Select Facetten eine Rolle.

Angenommen eine Anwendung bietet eine Facette über eine bestimmte Eigenschaft der durchsuchbaren Dokumente an. Sobald der Benutzer auf einen Wert dieser Facette einschränkt, reduziert sich die Facette automatisch auf diesen einen Wert (mit facet.mincount=1) bzw. ist die Anzahl bei allen anderen Werten 0 (bei facet.mincount=0). Dadurch verliert die Facette ihre Bedeutung.
Wollte man dem Benutzer auch die Anzahlen der anderen Werte anzeigen, müsste eine zusätzliche Anfrage gestellt werden, in der die Beschränkung
auf den Facetten-Wert ausgenommen wäre:

q=*:*&fq=typ:Text
q=*:*&facet=true&facet.field=typ

Mit lokalen Parametern kann dies auch ohne zusätzliche Anfrage erreicht werden. Dazu wird die Einschränkung, die beim Facettieren ignoriert werden soll, zunächst mit einem Tag markiert. Anschließend wird dieses Tag beim Facettieren als auszuschließende Einschränkung angegeben:

q=*:*&fq={!tag=typ-auswahl}type:Text&facet=true&facet.field={!ex=typ-auswahl}typ

Eine weitere Verwendungsmöglichkeit besteht darin, eine Facette umzubenennen, d.h. sie im Suchergebnis unter einem anderen Schlüsselwort ausgeben zu lassen. Dazu wird der lokale Parameter key verwendet:

q=*:*&facet=true&facet.field={!key=Dokument-Typ}typ

Lokale Parameter beim Join

Auch bei Join-Queries werden lokale Parameter verwendet:

q={!join from=hersteller to=id}name:a*

Hier wird eine besondere Kurzform für einen Parameterwert eingesetzt. Fehlt vor einem Parameterwert der zugehörige Name, so wird dieser immer als “type” angenommen. Die vollständige Langform der Anfrage ist also:

q={!type=join from=hersteller to=id}name:a*

Der Parameter type steuert, welchen Query Parser Solr verwenden soll, um die Anfrage zu verarbeiten. Mit “type=join” wird der Join Query Parser ausgewählt, der dafür zuständig ist, JoinQueries auszuführen.

Die Parameter from und to beschreiben dabei die Beziehung zwischen den Dokumenten und entscheiden daher, wie Solr das Suchergebnis konstruieren soll.

Like it? Share it!