http://onionworks.net/2004/search

query (rangeFrom : int, rangeTo : int, field : string, [keywordFields : string], [whitespaceFields : string], query : string, [fuzzySearchValue : string]) : nodeset

Die Methode query führt eine Anfrage an Lucene aus, und gibt die gefundenen Werte zurück.

Die ersten beiden Parameter geben an, wie viele Suchergebnisse zurück gegeben werden soll. Wird beispielsweise für rangeFrom eins angegeben und für rangeTo 100, werden die ersten 100 Eregebnisse zurückgegeben.

Im Parameter "field" wird der Name des Standardsuchfelds gesetzt. Mehrere Feldnamen können durch Leerzeichen separiert angegeben werden. Ist ein Suchtext nicht explizit an ein Feld gebunden, wird danach im Standardsuchfeld gesucht. In der Regel wird hier der Name des Feldes angegeben, in dem der Inhalt für die Voltextsuche indiziert wurde, z.B. "fulltext".

Um eine Filterung bestimmter Felder vorzunehmen, werden diese im Parameter "keywordFields" vorher bekannt gegeben. Wollen Sie zum Beispiel in der Such-Query mit "language:de" die Suchergebnisse danach filtern, ob im Feld "language" der Wert "de" steht, geben Sie im Parameter "keywordFields" den Wert "language" an. Dies ermöglicht es der Extension, bei der Anfrage an Lucene den korrekten Query-Analyzer zu wählen bzw. anzugeben. Mehrere Feldnamen können durch Leerzeichen separiert angegeben werden.

Wollen Sie explizit in bestimmten Feldern mit dem "WhitespaceAnalyzer" von Lucene suchen, geben Sie diese Feldnamen im Parameter "whitespaceFields" an. Die Syntax entspricht der der "keywordFields".

Als letzten Parameter können Sie nun den Querystring angeben. Die Syntax entspricht der von Lucene und kann auch in der entsprechenden Dokumentation nachgelesen werden.

Nachfolgend finden Sie ein Beispiel für das XML, welches die Methode query() zurück gibt.

<result count="2">
<object id="onion://data/objects/309#node&language=de" score="100" />
<object id="onion://data/objects/42#node&language=de" score="87" />
</result>
Rückgabe-XML der query()-Methode

Der nachstehende Code zeigt beispielhaft, wie Sie eine Suche ausführen und anschließend die Suchergebnisse auflisten.

<xsl:variable name="result" select="search:query(1, 100, 'fulltext', 'site language', 'site:15 AND language:de AND Berlin')/result" />
<xsl:choose>
<xsl:when test="$result/@error = 'catalogNotReady'">
<p class="error">Der Suchkatalog wird im Moment initial neu erstellt. Bitte versuchen Sie es in einigen Minuten erneut.</p>
</xsl:when>
<xsl:when test="$result/@error">
<p class="error">Ihre Suchabfrage ist ungültig. Bitte versuchen Sie es mit einem anderen Suchbegriff erneut.</p>
</xsl:when>
<xsl:otherwise>
<p>Ihre Suche ergab
<xsl:value-of select="$result/@count" />
Treffer.</p>
<xsl:for-each select="$result/object">
<c.literalCall id="{@id}" method="search.list" />
</xsl:for-each>
</xsl:otherwise>
</xsl:choose>
Ausgabe der Suchergebnisse

Im obigen Beispiel wird der Volltext (Standardsuchfeld) nach dem Wort "Berlin" durchsucht. Gleichzeitig müssen die Suchergebnisse in den Feldern "site" und "language" bestimmte Werte aufweisen, nämlich "15" und "de".

Für den Fall, dass bei der Ausführung der query()-Methode ein Fehler aufgetreten ist, hat das Root-Element <result> des Rückgabe-XML ein Attribut "error". Dieses enthält entweder explizit den Wert "catalogNotReady" oder die Ausgabe der entsprechenden Exception Message.

Im Beispiel oben wird daher zunächst auf die konkrete Meldung reagiert und ansonsten eine allgemeinere Fehlermeldung ausgegeben. Ist das Attribut "error" nicht vorhanden, konnte die Suche erfolgreich ausgeführt werden.

In diesem Fall wird die Anzahl der Suchergebnisse ausgegeben, gefolgt von einer Auflistung der Ergebnisse.