lucene-index-structure.xml 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 24249 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="learning.lucene.index-structure">
  5. <title>Lucene Index Struktur</title>
  6. <para>
  7. Um <classname>Zend_Search_Lucene</classname>'s Mögichkeiten mit maximaler Performance
  8. kompett anzuwenden, muss man die interne Struktur des Index verstehen.
  9. </para>
  10. <para>
  11. Ein <emphasis>index</emphasis> wird als Set von Dateien in einem einzelnen Verzeichnis
  12. gespeichert.
  13. </para>
  14. <para>
  15. Ein <emphasis>index</emphasis> besteht auf einer beliebigen Anzahl von unabhängigen
  16. <emphasis>Segmenten</emphasis> welche Informationen über ein Subset von indizierten
  17. Dokumenten speichern. Jedes <emphasis>Segment</emphasis> hat sein eigenes
  18. <emphasis>Wörterbuch an Ausdrücken</emphasis>, Ausdrucks Wörterbuch Indezes, und Dokument
  19. Speicher (speichert Feld Werte)
  20. <footnote>
  21. <para>
  22. Beginnend mit Lucene 2.3, können Dokument Speicherdateien zwischen Segmenten geteilt
  23. werden; trotzdem verwendet <classname>Zend_Search_Lucene</classname> diese
  24. Möglichkeit nicht
  25. </para>
  26. </footnote>.
  27. Alle Segmentdaten werden in <filename>_xxxxx.cfs</filename> Dateien gespeichert, wobei
  28. <emphasis>xxxxx</emphasis> der Name des Segments ist.
  29. </para>
  30. <para>
  31. Sobald die Index Segment Datei erstellt wurde kann Sie nicht mehr aktualisiert werden. Neue
  32. Dokumente werden in neuen Segmenten hinzugefügt. Gelöschte Dokumente werden nur in einer
  33. optionalen <filename>&lt;segmentname&gt;.del</filename> Datei als gelöscht markiert.
  34. </para>
  35. <para>
  36. Die Aktualisierung von Dokumenten wird als seperate Lösch- und Hinzufüge Operation
  37. durchgeführt selbst wenn Sie als <acronym>API</acronym> Aufruf mit
  38. <methodname>update()</methodname> durchgeführt wird <footnote><para>Dieser Aufruf wird
  39. aktuell nur von Java Lucene unterstützt, es ist aber geplant die
  40. <classname>Zend_Search_Lucene</classname> <acronym>API</acronym> mit Ähnlicher
  41. Funktionalität zu erweitern</para></footnote>. Das vereinfacht das hinzufügen neuer
  42. Dokumente und erlaubt das Aktualisieren gleichzeitig mit Such Operationen.
  43. </para>
  44. <para>
  45. Auf der anderen Seite verlängert die Verwendung mehrerer Segmente (ein Dokument pro Segment
  46. als extremster Fall) die Suchzeit:
  47. </para>
  48. <itemizedlist>
  49. <listitem>
  50. <para>
  51. Das Empfangen von Ausdrücken von einem Verzeichnis wird für jedes Segment
  52. durchgeführt;
  53. </para>
  54. </listitem>
  55. <listitem>
  56. <para>
  57. Der Index des Ausdrucks Verzeichnisses wird für jedes Segment vorgeladen (dieser
  58. Prozess nimmt für einfache Abfragen die meiste Zeit in Anspruch, und er benötigt
  59. auch zusätzlichen Speicher).
  60. </para>
  61. </listitem>
  62. </itemizedlist>
  63. <para>
  64. Wenn das Ausdrucks Verzeichnis einen Wendepunkt erreicht, dann ist die Suche durch ein
  65. Segment <emphasis>N</emphasis> in den meisten Fällen mal schneller als die Suche durch
  66. <emphasis>N</emphasis> Segmente.
  67. </para>
  68. <para>
  69. <emphasis>Index Optimierung</emphasis> verbindet zwei oder mehr Segmente in ein einzelnes
  70. Segment. Ein neues Segment wird der Liste der Index Segmente hinzugefügt, und alte Segmente
  71. werden ausgeschlossen.
  72. </para>
  73. <para>
  74. Aktualisierungen von Segment Listen werden als atomsche Operation durchgeführt. Das gibt
  75. die Möglichkeit gleichzeitig neue Dokumente hinzuzufügen, Index Operationen durchzuführen,
  76. und den Index zu durchsuchen.
  77. </para>
  78. <para>
  79. Die automatische Optimierung des Index wird nach jeder Segment Erzeugung durchgeführt. Sie
  80. verbindet Sets der kleinsten Segmente in größere Segmente, und größere Segmente in noch
  81. größere Segmente, wenn wir genug Segmente zum verbinden haben.
  82. </para>
  83. <para>
  84. Die automatische Optimierung wird von drei Optionen kontrolliert:
  85. </para>
  86. <itemizedlist>
  87. <listitem>
  88. <para>
  89. <emphasis>MaxBufferedDocs</emphasis> (die minimale Anzahl an notwendigen Dokumenten
  90. bevor die im Speicher gepufferten Dokumente in ein neues Segment geschrieben
  91. werden);
  92. </para>
  93. </listitem>
  94. <listitem>
  95. <para>
  96. <emphasis>MaxMergeDocs</emphasis> (die größte Anzahl an Dokumenten die von einer
  97. Optimierungs Operation verbunden werden); und
  98. </para>
  99. </listitem>
  100. <listitem>
  101. <para>
  102. <emphasis>MergeFactor</emphasis> (welcher definiert wie oft Segment Indezes von
  103. automatischen Optimierungs Operationen verbunden werden).
  104. </para>
  105. </listitem>
  106. </itemizedlist>
  107. <para>
  108. Wenn wir pro Skript Ausführung ein Dokument hinzufügen, wird
  109. <emphasis>MaxBufferedDocs</emphasis> nicht verwendet (es wird nur ein neues Segmente mit nur
  110. einem Dokument am Ende der Skript Ausführung erstellt, zu einer Zeit zu welcher der
  111. automatische Optimierungs Prozess startet).
  112. </para>
  113. </sect1>