lucene-indexing.xml 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 24249 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="learning.lucene.indexing">
  5. <title>Indizierung</title>
  6. <para>
  7. Indizierung wird durch das Hinzufügen eines neuen Dokuments zu einem bestehenden oder neuen
  8. Index durchgeführt:
  9. </para>
  10. <programlisting language="php"><![CDATA[
  11. $index->addDocument($doc);
  12. ]]></programlisting>
  13. <para>
  14. Es gibt zwei Wege Dokument Objekte zu erstellen. Der erste ist es manuell zu tun.
  15. </para>
  16. <example id="learning.lucene.indexing.doc-creation">
  17. <title>Manuelle Dokument Erstellung</title>
  18. <programlisting language="php"><![CDATA[
  19. $doc = new Zend_Search_Lucene_Document();
  20. $doc->addField(Zend_Search_Lucene_Field::Text('url', $docUrl));
  21. $doc->addField(Zend_Search_Lucene_Field::Text('title', $docTitle));
  22. $doc->addField(Zend_Search_Lucene_Field::unStored('contents', $docBody));
  23. $doc->addField(Zend_Search_Lucene_Field::binary('avatar', $avatarData));
  24. ]]></programlisting>
  25. </example>
  26. <para>
  27. Die zweite Methode ist das Laden von <acronym>HTML</acronym> oder von Microsoft Office 2007
  28. Dateien:
  29. </para>
  30. <example id="learning.lucene.indexing.doc-loading">
  31. <title>Laden vom Dokument</title>
  32. <programlisting language="php"><![CDATA[
  33. $doc = Zend_Search_Lucene_Document_Html::loadHTML($htmlString);
  34. $doc = Zend_Search_Lucene_Document_Docx::loadDocxFile($path);
  35. $doc = Zend_Search_Lucene_Document_Pptx::loadPptFile($path);
  36. $doc = Zend_Search_Lucene_Document_Xlsx::loadXlsxFile($path);
  37. ]]></programlisting>
  38. </example>
  39. <para>
  40. Wenn ein Dokument von einem der unterstützten Formate geladen wird, kann es trotzdem noch
  41. manuell mit einem neuen benutzerdefinierten Feld erweitert werden.
  42. </para>
  43. <sect2 id="learning.lucene.indexing.policy">
  44. <title>Indizierungs Policy</title>
  45. <para>
  46. Man sollte eine Indizierungs Policy im Architektur Design der eigenen Anwendung
  47. definieren.
  48. </para>
  49. <para>
  50. Man könnte eine auf-Wunsch Index Konfiguration benötigen (etwas wie ein
  51. <acronym>OLTP</acronym> System). In solchen Systemen wird pro Benutzeranfrage
  52. normalerweise ein Dokument hinzugefügt. Daher beeinflusst die
  53. <emphasis>MaxBufferedDocs</emphasis> Option das System nicht. Auf der anderen Seite ist
  54. <emphasis>MaxMergeDocs</emphasis> wirklich nützlich da es erlaubt die maximale
  55. Ausführungszeit des Skripts zu begrenzen. <emphasis>MergeFactor</emphasis> sollte auf
  56. einen Wert gesetzt werden der die Balance zwischen der durchschnittlichen
  57. Indizierungszeit (sie beeinflusst auch die durchschnittliche automatische
  58. Optimierungszeit) und der Geschwindigkeit der Suche hält (Das Level der Index
  59. Optimierung ist abhängig von der Anzahl der Segmente).
  60. </para>
  61. <para>
  62. Wenn man primär Batch Indexaktualisierungen durchführt sollte die eigene Konfiguration
  63. eine <emphasis>MaxBufferedDocs</emphasis> Option setzen welche auf den maximalen Wert
  64. gesetzt wird der vom vorhandenen Speicherplatz unterstützt wird.
  65. <emphasis>MaxMergeDocs</emphasis> und <emphasis>MergeFactor</emphasis> müssen auf Werte
  66. gesetzt werden welche die Einflussnahme durch automatische Optimierung so stark wie
  67. möglich reduziert <footnote><para>Ein zusätzliches Limit sind die maximal vom
  68. Betriebssystem unterstützten Dateihandler für gleichzeitig geöffnete
  69. Operationen</para></footnote>. Die komplette Indexoptimierung sollte nach der
  70. Indizierung durchgeführt werden.
  71. </para>
  72. <example id="learning.lucene.indexing.optimization">
  73. <title>Index Optimierung</title>
  74. <programlisting language="php"><![CDATA[
  75. $index->optimize();
  76. ]]></programlisting>
  77. </example>
  78. <para>
  79. In einigen Konfigurationen ist es effizienter Indexaktualisierungen zu serialisieren
  80. indem Updateanfragen in einer Queue organisiert werden und verschiedene Updateanfragen
  81. in einer einzelnen Skriptausführung bearbeitet werden. Das reduziert den Overhead des
  82. öffnens vom Index und erlaubt die Verwendung von Buffern für die Index Dokumente.
  83. </para>
  84. </sect2>
  85. </sect1>