lucene-searching.xml 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 24249 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="learning.lucene.searching">
  5. <title>Suchen</title>
  6. <para>
  7. Suchen wird durch Verwendung der <methodname>find()</methodname> Methode durchgeführt:
  8. </para>
  9. <example id="learning.lucene.searching.search-example">
  10. <title>Den Index durchsuchen</title>
  11. <programlisting language="php"><![CDATA[
  12. $hits = $index->find($query);
  13. foreach ($hits as $hit) {
  14. printf("%d %f %s\n", $hit->id, $hit->score, $hit->title);
  15. }
  16. ]]></programlisting>
  17. </example>
  18. <para>
  19. Dieses Beispiel demonstriert die Verwendung von zwei speziellen Suchtreffer Eigenschaften -
  20. <property>id</property> und <property>score</property>.
  21. </para>
  22. <para>
  23. <property>id</property> ist ein interner Dokument Identifikator der im Lucene Index
  24. verwendet wird. Er kann in unterschiedlichen Operationen verwendet werden, inklusive dem
  25. Löschen eines Dokuments vom Index:
  26. </para>
  27. <example id="learning.lucene.searching.delete-example">
  28. <title>Löschen eines indizierten Dokuments</title>
  29. <programlisting language="php"><![CDATA[
  30. $index->delete($id);
  31. ]]></programlisting>
  32. </example>
  33. <para>
  34. Oder Empfangen eines Dokuments vom Index:
  35. </para>
  36. <example id="learning.lucene.searching.retrieve-example">
  37. <title>Empfangen eines indizierten Dokuments</title>
  38. <programlisting language="php"><![CDATA[
  39. $doc = $index->getDocument($id);
  40. ]]></programlisting>
  41. </example>
  42. <note id="learning.lucene.searching.identifiers">
  43. <title>Interne Dokument Identifikatoren</title>
  44. <para>
  45. Wichtiger Hinweis! Interne Dokument Identifikatoren können durch eine Index Optimierung
  46. oder den automatischen Optimierungsprozess geändert werden, aber Sie werden niemals bei
  47. der Ausführung eines einzelnen Skripts geändert solange die
  48. <methodname>addDocument()</methodname> (welche eine automatische Optimierungsprozedur
  49. beinhalten kann) oder die <methodname>optimize()</methodname> Methoden aufgerufen
  50. werden.
  51. </para>
  52. </note>
  53. <para>
  54. Das <property>score</property> Feld sind Trefferpunkte. Such Ergebnisse werden standardmäßig
  55. nach Trefferpunkten sortiert (die besten Ergebnisse werden als erstes zurückgegeben).
  56. </para>
  57. <para>
  58. Es ist auch möglich Ergebnissets anhand von spezifischen Feldwerten zu sortieren. Siehe die
  59. <link linkend="zend.search.lucene.searching.sorting">
  60. <classname>Zend_Search_Lucene</classname> Dokumentation</link> für mehr Details über
  61. diese Möglichkeit.
  62. </para>
  63. <para>
  64. Das Beispiel demonstriert auch eine Möglichkeit um auf gespeicherte Felder zugreifen zu
  65. können (z.B. <command>$hit->title</command>). Beim ersten Zugriff auf jede
  66. Treffer-Eigenschaft, die sich von <property>id</property> oder <property>score</property>
  67. unterscheidet, wird jedes dokumentierte gespeicherte Feld geladen, und die
  68. korrespondierenden Feldwerte werden zurückgegeben.
  69. </para>
  70. <para>
  71. Das verursacht eine Doppeldeutigkeit für Dokumente die Ihre eigenen <property>id</property>
  72. oder <property>score</property> Felder haben; als Ergebnis wird empfohlen diese Feldnamen
  73. nicht in gespeicherten Dokumenten zu verwenden. Trotzdem kann auf Sie über die
  74. <methodname>getDocument()</methodname> Methode zugegriffen werden:
  75. </para>
  76. <example id="learning.lucene.searching.id-score-fields">
  77. <title>Zugriff auf die originalen "id" und "score" Felder von Dokumenten</title>
  78. <programlisting language="php"><![CDATA[
  79. $id = $hit->getDocument()->id;
  80. $score = $hit->getDocument()->score;
  81. ]]></programlisting>
  82. </example>
  83. </sect1>