sa.crawler()
Die Methode sa.crawler() ist eine literale Rendering-Methode, die importiert und genutzt werden kann, um das XML aufzubauen, welches Lucene für den Suchindex nutzt. Wie der Name schon suggeriert funktioniert die Methode nur auf einem Strukturpunkt, der eine Entsprechung in der Strukturabstraktion hat. Die Methode importiert die includes.self().
Für die Anpassung der indizierten Inhalte eines Knotens können bestimmte Variablen und ein Template überschrieben werden.
Variablen
- contentMethod :string
- boost :decimal
$contentMethod
In der Variablen $contentMethod wird der Name der Standard-Methode festgelegt, die den Inhalt rendert. Der implizite Wert ist "content". Die textuelle Ausgabe dieser Methode wird wird für die Indizierung der Volltextsuche genutzt.
$boost
Die Variable $boost kann einen Wert zwischen 0 und 1 annehmen. Sie steuert die Gewichtung des aktuellen Strukturpunkts innerhalb der Suche. Der Standardwert ist "1.0" und sollte auch nicht fahrlässig überschrieben werden.
Ausgabe und Verhalten der Methode
Die Methode erzeugt für jeden Strukturpunkt ein XML. Dieses enthält einige Informationen zu dem Strukturpunkt sowie ggf. zu indizierende Inhalte und Links auf die Dokumente, die als nächstes zu indizieren sind (in der Regel die Kindknoten).
Für das erzeugte XML sind zwei Fälle zu unterscheiden:
- das Dokument selbst soll indiziert werden
- das Dokument selbst soll nicht indiziert werden.
Ob ein Dokument indiziert werden soll oder nicht, wird über eine Variable $isDelegate gesteuert. Diese greift standardmäßig den Wert $self/meta/@index:delegate ab. Soll nun - fest oder pflegbar - für ein Dokument gesteuert werden, dass es nicht indiziert werden soll, kann der entsprechende Wert einfach in der meta()-Methode auf "false" gesetzt werden.
Dokument nicht indizieren
Soll das aktuelle Dokument nicht indiziert werden, erzeugt die Methode das folgende XML.
<delegate id="{$self/meta/@node}" xmlns="http://onionworks.net/2004/search"> <references> <reference xlink="{sa.crawler auf Kind 1}" /> <reference xlink="{sa.crawler auf Kind 2}" /> <reference xlink="{sa.crawler auf Kind n}" /> </references> </delegate>
Dokument indizieren
Für den Standard-Fall, dass das aktuelle Dokument ebenfalls indiziert werden soll, wird folgendes XML erzeugt.
<indexEntry id="{$self/meta/@node}" boost="{number($boost)}" xmlns="http://onionworks.net/2004/search"> <fulltext>{Label} {Textuelle Ausgabe der $contentMethod}</fulltext> <customFields> <field name="language" type="keyword">{$language}</field> {eigene Felder} <field name="type" type="keyword">{$self/meta/@type}</field> <field name="secure" type="keyword">{$self/context/@secure = 'true'}</field> </customFields> </indexEntry>
An der Stelle, die mit {eigene Felder} markiert ist, können weitere benötigte Felder/Werte hinzugefügt werden. Dies geschieht durch Implementierung eines Templates mit dem Namen "customFields".
Auf diese Werte lässt sich später bei der Ausführung der Suche das Ergebnis filtern. Die Filterung nach der Sprache beispielsweise stellt sicher, dass das Ergebnis von Lucene auch nur solche Dokumente enthält, die in der aktuellen Seitensprache vorliegen.
Für Aufbau und Ausführung der Suche siehe auch das Tutorial "Interne Webseiten-Suche".