GSB 7.0 Standardlösung

SolrQueryAction

Dieses Dokument beinhaltet eine Referenz über die Möglichkeiten zur Konfiguration einer Formularaction. Dabei ist zu beachten, dass GSB-eigene Parameter direkt angegeben werden, Solr Parameter bekommen als Prefix "solr.". Eine genaue Erklärung der Suchsyntax findet man in der Dokumentation von Solr und Lucene

GSB-eigene Konfigurationsparameter

ParameterFunktionBeispiel
inhibitSearchVerhindert die Ausführung der Suche bei bestimmten Werten von Eingabeparametern
  • inhibitSearch=templateQueryString=Suchbegriff, \
templateQueryString=search term
  • inhibitSearch=oneOfTheseWords=Suchbegriff, \
oneOfTheseWords=search term, \allOfTheseWords=Suchbegriff, \allOfTheseWords=search term
optimizeForTablesEs werden nur die Contentbeans erzeugt, die tatsächlich auch aktuell angezeigt werden, wenn dieser Wert auf true gesetzt
wird.
Gilt NUR, wenn die Ausgabe in einer generischen Tabelle erfolgt, was immer empfohlen ist, da somit die Suchperformanz
erheblich verbessert wird.
  • true: Instantiierung der aktuell angezeigten Ergebnisse (Contentbeans)
  • false: alle Contentbeans werden instantiiert (Perfomancekritisch)
useSolrPaging

Steuert die Funktionsweise des Blätterns, sollte auf true stehen, da dies massive Perfomancegewinne bringt.

Gilt ebenfalls NUR wenn für die Ausgabe der Ergebnisse in einer generischen Tabelle.

  • true: Solr basiertes Blättern, nur die Treffer werden vom Solr Server ermittelt, die auch aktuell angezeigt werden. Die Anzahl wird in der generischen Tabelle definiert (NICHT resultsPerPage !)
  • false: holt sich alle per solr.rows definierten Ergebnisse
resultsPerPageLegt die Anzahl der anzuzeigenden Treffer fest, kann im Request überschrieben werden. Wenn die Ausgabe per generischer Tabelle erfolgt, sollte dies im Dokument defineirt werden (siehe auch useSolrPaging).
  • resultsPerPage = 20
searchArchive
searchIssued
useSessionCacheLegt fest, ob Suchergebnisse im GSB-Cache gehalten werden sollen.
  • useSessionCache=false

Grundlegende Solr Query Parameter

Query ParameterFunktionBeispiel
solr.qFür die Übergabe der Suche
  • solr.q = +title_text:Steuer
  • solr.q = +title_text:Steuer description_text:Abgabe +Markt -Dollar
solr.sortLegt die Sortierreihenfolge fest
  • solr.sort = score desc
  • solr.sort = title_text_sort asc
  • solr.sort = dateOfIssue_dt desc
solr.rowsLegt die Anzahl der zurückzugebenden Ergebnisse fest
  • solr.rows = 500
solr.flLegt die zurückzugebenden Index-Felder fest
  • solr.fl = id_, score
  • solr.fl = id_, content, score

Aufbau von Filter Queries

Query ParameterFunktionBeispiel
solr.fqFür generelle Einschränkungen des Suchraumes
  • solr.fq = +documentType_: BasePage, Article
solr.fq.listFalls mehr als eine Einschränkung gemacht werden soll,

wird hier eine kommaseparierte Liste mit logischen Namen gepflegt

  • solr.fq.list = docTypeFilter, themenFilter
  • solr.fq.list = themenFilter, dateOfIssueFilter
solr.fq.list.<Name>Legt die Filter-Query für einen Namen fest
  • solr.fq.list.docTypeFilter = +documentType_: BasePage, Article
  • solr.fq.list.themenFilter = +cl2Categories_Themen:Steuern
  • solr.fq.list.dateOfIssueFilter = +dateOfIssue_dt:[2012-02-01T08:00:00.000Z/DAY TO *]

Suchwort-Highlighting

Query ParameterFunktionBeispiel
solr.hlSoll für das Suchergebnis Highlighting eingeschaltet werden
  • solr.hl = true
  • solr.hl = false
solr.hl.flLegt die Felder fest, auf die das Highlighting angewandt werden soll
  • solr.hl.fl = content_highlighting
  • solr.hl.fl = title_text, teaser_text
solr.hl.fragsizeLegt die Größe der Umgebung fest, die für das Highlighting aus den Feldern extrahiert wird
  • solr.hl.fragsize = 150
solr.hl.simple.preLegt das HTML-Anfangstag für das Highlighting fest
  • solr.hl.simple.pre = <b>
  • solr.hl.simple.pre = <em class="highlighted">
solr.hl.simple.postLegt das HTML-Endtag für das Highlighting fest
  • solr.hl.simple.post = </b>
  • solr.hl.simple.post = </em>

Eine ausführliche Dokumentation aller Highlighting Parameter findet man in der Solr Dokumentation.

Aufbau von Facetten

Facetten stellen zusätzliche Informationen über die Suche zur Verfügung, ohne die Eigentliche Suche zu verändern. Eine Facette über die Dokumententypen zeigt einem z.B. wie viele Reden, Artikel, etc. in den Suchergebnissen vorhanden sind.

Grundkonfiguration

Query ParameterFunktionBeispiel
solr.facetLegt fest, ob eine faccettierte Suche ausgeführt wird
  • solr.facet = true
solr.facet.sortLegt die Sortierung der Facettenergebnisse fest
  • solr.facet.sort = index (Lexikographisch)
  • solr.facet.sort = count (Absteigend nach der Anzahl)
solr.facet.mincountLegt fest, wieviele Treffer eine Facette mindestens haben muss,

damit sie angezeigt wird

  • solr.facet.mincount = 0 (Zeige alle)
  • solr.facet.mincount = 1 (Zeige nur die mit Treffern)

Facetten Definitionen

Query ParameterFunktionBeispiel
solr.facet.listEine kommaseparierte Liste mit logischen Namen der Facetten
  • solr.facet.list = docTypeFacette, themenFacette
  • solr.facet.list = themenFacette, dateOfIssueFacette
solr.facet.list.<Name>Legt die Facette für einen Namen fest
  • solr.facet.list.docTypeFacette = documentType_
  • solr.fq.list.themenFilter = cl2Categories_Themen
  • solr.fq.list.dateOfIssueFilter = dateOfIssue_dt
solr.facet.list.<Name>.startLegt für eine Range Facette den Startwert / Startzeitpunkt fest
  • solr.facet.list.dateofissue.start = NOW/YEAR-4YEAR
solr.facet.list.<Name>.endLegt für eine Range Facette den Endwert / Endzeitpunkt fest
  • solr.facet.list.dateofissue.end = NOW/YEAR+1YEAR
solr.facet.list.<Name>.gapLegt für eine Range Facette die Schrittweite fest
  • solr.facet.list.dateofissue.gap = +1YEAR

Facetten Queries

Query ParameterFunktionBeispiel
solr.facetquery.listEine kommaseparierte Liste mit logischen Namen der Facetten-Queries
  • solr.facetquery.list = lastweek,lastmonth,last3month,lastyear,older
solr.facetquery.list.<Name>Legt die Facetten-Query für einen Namen fest
  • solr.facetquery.list.lastweek = dateOfModification_dt:[NOW/DAY-7DAY TO *]
  • solr.facetquery.list.lastmonth = dateOfModification_dt:[NOW/DAY-1MONTH TO *]
  • solr.facetquery.list.last3month = dateOfModification_dt:[NOW/DAY-3MONTH TO *]
  • solr.facetquery.list.lastyear = dateOfModification_dt:[NOW/DAY-1YEAR TO *]
  • solr.facetquery.list.older = dateOfModification_dt:[* TO NOW/DAY-1YEAR]

Mapping von Request-Parametern

Generell können Request-Parameter direkt in der Formularaction als Suchparameter benutzt werden. Allerdings bieten sich für häufig genutzte Parameter Suchkonfigurationsdokumente (<ConfigRichText10>) an. In diesen können auch Angaben gemacht werden, ob die Begriffe verundet oder verodert werden sollen, wie einzelne Query-Bestandteile aufgebaut werden sollen und welche Suchwörter ausgeschlossen werden sollen.

Beispiele:

<syntaxhighlight lang="xml" enclose="div">

    1. Überprüfe, ob der Request-Parameter templateQueryString nicht leer ist
  1. if( "$!templateQueryString" != "")
 ## Hier wird für den gegeben Suchbegriff eine Suche gegen den Inhalt (content) und die Schlagwörter (keywords_str) konfiguriert, ## wobei Dokumente eine höhere Relevanz erhalten, falls der gesuchte Begriff in den Schlagwörtern vorkommt #set($solr_templateQueryStringSimple = "{!type=dismax mm=50% qf='content^1 keywords_str^3'}$templateQueryString")
  1. end
    1. Die gleiche Überprüfung wie oben
  1. if( "$!templateQueryString" != "")
 ## Ein ähnlicher erzeugter Query-String wie oben, nur die Suchfunktion berechnet das Ergebnis etwas anders #set($solr_templateQueryStringExtended = "{!type=edismax mm=50% qf='content^1 keywords_str^3'}$templateQueryString")
  1. end

</syntaxhighlight>

Durch das Einbinden dieses Dokuments in der Formularaction kann man nun statt

  • solr.q = $templateQueryString

als einfache Suche gegen das Standard-Feld Content eine der beiden gewichteten Suchvarianten benutzen

  • solr.q = $solr_templateQueryStringSimple

oder

  • solr.q = $solr_templateQueryStringExtended

Für die Suchparamter oneOfTheseWords und allOfTheseWords ergibt sich z.B. folgendes Konfigurationsdokument.

<syntaxhighlight lang="xml" enclose="div">

  1. if( "$!oneOfTheseWords" != "" ) #set($solr_oneOfTheseWords= "{!q.op=OR}" + $oneOfTheseWords)
  2. end
  1. if( "$!allOfTheseWords" != "" ) #set($solr_allOfTheseWords= "{!q.op=AND}" + $allOfTheseWords)
  2. end

</syntaxhighlight>