|
|
@@ -1,5 +1,5 @@
|
|
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
|
-<!-- EN-Revision: 14978 -->
|
|
|
+<!-- EN-Revision: 15037 -->
|
|
|
<!-- Reviewed: no -->
|
|
|
<sect1 id="zend.search.lucene.searching">
|
|
|
<title>Einen Index durchsuchen</title>
|
|
|
@@ -358,25 +358,153 @@ $index->find($query, 'name', SORT_STRING, 'quantity', SORT_NUMERIC, SORT_DESC);
|
|
|
<sect2 id="zend.search.lucene.searching.highlighting">
|
|
|
<title>Such Resultate hervorheben</title>
|
|
|
<para>
|
|
|
- Die <classname>Zend_Search_Lucene_Search_Query::highlightMatches()</classname> Methode erlaubt es
|
|
|
- dem Entwickler Begriffe von HTML Dokumenten im Kontext der Suchabfrage hervorzuheben:
|
|
|
+ Zend_Search_Lucene bietet zwei Optionen für das Highlightinh von Suchergebnissen.
|
|
|
+ </para>
|
|
|
+ <para>
|
|
|
+ Die erste ist die Verwendung der <code>Zend_Search_Lucene_Document_Html</code> Klasse
|
|
|
+ (siehe <link linkend="zend.search.lucene.index-creation.html-documents">das Kapitel
|
|
|
+ über HTML Dokumente</link> für Details) mit den folgenden Methoden:
|
|
|
<programlisting role="php"><![CDATA[
|
|
|
-$query = Zend_Search_Lucene_Search_QueryParser::parse($queryStr);
|
|
|
-$hits = $index->find($query);
|
|
|
-...
|
|
|
-$highlightedHTML = $query->highlightMatches($sourceHTML);
|
|
|
+/**
|
|
|
+ * Highlight text with specified color
|
|
|
+ *
|
|
|
+ * @param string|array $words
|
|
|
+ * @param string $colour
|
|
|
+ * @return string
|
|
|
+ */
|
|
|
+public function highlight($words, $colour = '#66ffff');
|
|
|
]]>
|
|
|
</programlisting>
|
|
|
+ <programlisting role="php"><![CDATA[
|
|
|
+/**
|
|
|
+ * Highlight text using specified View helper or callback function.
|
|
|
+ *
|
|
|
+ * @param string|array $words Words to highlight. Words could be organized using the array or string.
|
|
|
+ * @param callback $callback Callback method, used to transform (highlighting) text.
|
|
|
+ * @param array $params Array of additionall callback parameters passed through into it
|
|
|
+ * (first non-optional parameter is an HTML fragment for highlighting)
|
|
|
+ * @return string
|
|
|
+ * @throws Zend_Search_Lucene_Exception
|
|
|
+ */
|
|
|
+public function highlightExtended($words, $callback, $params = array())
|
|
|
+]]>
|
|
|
+ </programlisting>
|
|
|
+ </para>
|
|
|
+ <para>
|
|
|
+ Um das Verhalten beim Highlighting zu verändern kann die
|
|
|
+ <code>highlightExtended()</code> Methode mit einem spezifizierten Callback verwendet
|
|
|
+ werden, welche einen oder mehreren Parametern entgegennimmt
|
|
|
+ <footnote>
|
|
|
+ <para>
|
|
|
+ Der erste ist ein HTML Fragment für das Highlighting und die anderen sind
|
|
|
+ abhängig vom Verhalten des Callbacks. Der Rückgabewert ist ein highlighted
|
|
|
+ HTML Fragment.
|
|
|
+ </para>
|
|
|
+ </footnote>
|
|
|
+ , oder durch Erweiterung der <code>Zend_Search_Lucene_Document_Html</code> Klasse und
|
|
|
+ dem Anpassen der <code>applyColour($stringToHighlight, $colour)</code> Methode die
|
|
|
+ als Standardmäßiger Callback für das Highlighten verwendet wird.
|
|
|
+ <footnote>
|
|
|
+ <para>
|
|
|
+ In beiden Fällen wird das zurückgegebene HTML automatisch in gültiges XHTML
|
|
|
+ transformiert.
|
|
|
+ </para>
|
|
|
+ </footnote>
|
|
|
+ </para>
|
|
|
+ <para>
|
|
|
+ <link linkend="zend.view.helpers">View Helfer</link> können auch als Callbacks im
|
|
|
+ Kontext von View Skripten verwendet werden:
|
|
|
+ <programlisting role="php"><![CDATA[
|
|
|
+$doc->highlightExtended('word1 word2 word3...', array($this, 'myViewHelper'));
|
|
|
+]]>
|
|
|
+ </programlisting>
|
|
|
+ </para>
|
|
|
+ <para>
|
|
|
+ Das Ergebnis der Highlighting Operation wird von der
|
|
|
+ <code>Zend_Search_Lucene_Document_Html->getHTML()</code> Methode empfangen.
|
|
|
</para>
|
|
|
|
|
|
+ <note>
|
|
|
+ <para>
|
|
|
+ Highlighting wird in den Ausdrücken des aktuellen Analysators durchgeführt. So
|
|
|
+ werden alle Formen des Wortes/der Wörter vom Analysator erkannt und highgelighted.
|
|
|
+ </para>
|
|
|
+ <para>
|
|
|
+ Z.B. wenn der aktuelle Analysator unabhängig von der Groß- oder Kleinschreibung ist
|
|
|
+ und wir das Highlighten des Wortes 'text' anfragen, dann werden 'text', 'Text',
|
|
|
+ 'TEXT' und alle anderen Kombinationen von Schreibweisen geHighlightet.
|
|
|
+ </para>
|
|
|
+ <para>
|
|
|
+ Auf dem gleichen Weg wird, wenn der aktuelle Analysator Abstammung unterstützt und
|
|
|
+ wir das Highlighten von 'indexed' anfragen, dann werden 'index', 'indexing',
|
|
|
+ 'indices' und andere Formen dieser Wörter geHighlighted.
|
|
|
+ </para>
|
|
|
+ <para>
|
|
|
+ Wenn andererseits das Wort vom aktuellen Analysator übersprungen wird (z.B. wenn
|
|
|
+ ein Filter für kurze Wörter dem Analysator angehängt ist), dann wird nichts
|
|
|
+ geHighlighted.
|
|
|
+ </para>
|
|
|
+ </note>
|
|
|
+
|
|
|
+ <para>
|
|
|
+ Die zweite Option ist die Verwendung der
|
|
|
+ <code>Zend_Search_Lucene_Search_Query->highlightMatches(string $inputHTML[,
|
|
|
+ Zend_Search_Lucene_Search_Highlighter_Interface $highlighter])</code> Methode:
|
|
|
+ <programlisting role="php"><![CDATA[
|
|
|
+query = Zend_Search_Lucene_Search_QueryParser::parse($queryStr);
|
|
|
+highlightedHTML = $query->highlightMatches($sourceHTML);
|
|
|
+]]>
|
|
|
+ </programlisting>
|
|
|
+ </para>
|
|
|
+ <para>
|
|
|
+ Der optionale zweite Parameter ist ein Highlighter Objekt welches das
|
|
|
+ <code>Zend_Search_Lucene_Search_Highlighter_Interface</code> Interface implementiert:
|
|
|
+ <programlisting role="php"><![CDATA[
|
|
|
+interface Zend_Search_Lucene_Search_Highlighter_Interface
|
|
|
+{
|
|
|
+ /**
|
|
|
+ * Set document for highlighting.
|
|
|
+ *
|
|
|
+ * @param Zend_Search_Lucene_Document_Html $document
|
|
|
+ */
|
|
|
+ public function setDocument(Zend_Search_Lucene_Document_Html $document);
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Get document for highlighting.
|
|
|
+ *
|
|
|
+ * @return Zend_Search_Lucene_Document_Html $document
|
|
|
+ */
|
|
|
+ public function getDocument();
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Highlight specified words (method is invoked once per subquery)
|
|
|
+ *
|
|
|
+ * @param string|array $words Words to highlight. They could be organized using the array or string.
|
|
|
+ */
|
|
|
+ public function highlight($words);
|
|
|
+}
|
|
|
+]]>
|
|
|
+ </programlisting>
|
|
|
+ Wobei das <code>Zend_Search_Lucene_Document_Html</code> Objekt ein Objekt ist welches
|
|
|
+ von der HMTL Quelle erzeugt wird, die wiederum von der
|
|
|
+ <code>Zend_Search_Lucene_Search_Query->highlightMatches()</code> Methode geliefert
|
|
|
+ wird.
|
|
|
+ </para>
|
|
|
+
|
|
|
+ <para>
|
|
|
+ Wenn der <code>$highlighter</code> Parameter nicht angegeben wird, dann wird das
|
|
|
+ <code>Zend_Search_Lucene_Search_Highlighter_Default</code> Objekt initiiert und
|
|
|
+ verwendet.
|
|
|
+ </para>
|
|
|
+ <para>
|
|
|
+ Die Highlighter Methode <code>highlight()</code> ist einmal pro SubQuery enthalten,
|
|
|
+ deshalb hat sie für diese auch die Möglichkeit das Highlightig zu unterscheiden.
|
|
|
+ </para>
|
|
|
<para>
|
|
|
- Die <code>highlightMatches()</code> Methode verwendet die <classname>Zend_Search_Lucene_Document_Html</classname>
|
|
|
- Klasse (siehe den <link linkend="zend.search.lucene.index-creation.html-documents">HTML Dokumente Abschnitt</link> für Details)
|
|
|
- für das Bearbeiten von HTML, deshalb hat Sie die gleichen Voraussetzungen wie HTML Quellen.
|
|
|
+ Aktuell, macht der standardmäßige Highlighter das indem eine vordefinierte Farbtabelle
|
|
|
+ durchlaufen wird. Man kann also seinen eigenen Highlighter implementieren, oder den
|
|
|
+ standardmäßigen nur erweitern und die Farbtabelle umdefinieren.
|
|
|
</para>
|
|
|
</sect2>
|
|
|
|
|
|
</sect1>
|
|
|
-<!--
|
|
|
-vim:se ts=4 sw=4 et:
|
|
|
--->
|