| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 24249 -->
- <!-- Reviewed: no -->
- <sect1 id="learning.lucene.index-structure">
- <title>Lucene Index Struktur</title>
- <para>
- Um <classname>Zend_Search_Lucene</classname>'s Mögichkeiten mit maximaler Performance
- kompett anzuwenden, muss man die interne Struktur des Index verstehen.
- </para>
- <para>
- Ein <emphasis>index</emphasis> wird als Set von Dateien in einem einzelnen Verzeichnis
- gespeichert.
- </para>
- <para>
- Ein <emphasis>index</emphasis> besteht auf einer beliebigen Anzahl von unabhängigen
- <emphasis>Segmenten</emphasis> welche Informationen über ein Subset von indizierten
- Dokumenten speichern. Jedes <emphasis>Segment</emphasis> hat sein eigenes
- <emphasis>Wörterbuch an Ausdrücken</emphasis>, Ausdrucks Wörterbuch Indezes, und Dokument
- Speicher (speichert Feld Werte)
- <footnote>
- <para>
- Beginnend mit Lucene 2.3, können Dokument Speicherdateien zwischen Segmenten geteilt
- werden; trotzdem verwendet <classname>Zend_Search_Lucene</classname> diese
- Möglichkeit nicht
- </para>
- </footnote>.
- Alle Segmentdaten werden in <filename>_xxxxx.cfs</filename> Dateien gespeichert, wobei
- <emphasis>xxxxx</emphasis> der Name des Segments ist.
- </para>
- <para>
- Sobald die Index Segment Datei erstellt wurde kann Sie nicht mehr aktualisiert werden. Neue
- Dokumente werden in neuen Segmenten hinzugefügt. Gelöschte Dokumente werden nur in einer
- optionalen <filename><segmentname>.del</filename> Datei als gelöscht markiert.
- </para>
- <para>
- Die Aktualisierung von Dokumenten wird als seperate Lösch- und Hinzufüge Operation
- durchgeführt selbst wenn Sie als <acronym>API</acronym> Aufruf mit
- <methodname>update()</methodname> durchgeführt wird <footnote><para>Dieser Aufruf wird
- aktuell nur von Java Lucene unterstützt, es ist aber geplant die
- <classname>Zend_Search_Lucene</classname> <acronym>API</acronym> mit Ähnlicher
- Funktionalität zu erweitern</para></footnote>. Das vereinfacht das hinzufügen neuer
- Dokumente und erlaubt das Aktualisieren gleichzeitig mit Such Operationen.
- </para>
- <para>
- Auf der anderen Seite verlängert die Verwendung mehrerer Segmente (ein Dokument pro Segment
- als extremster Fall) die Suchzeit:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- Das Empfangen von Ausdrücken von einem Verzeichnis wird für jedes Segment
- durchgeführt;
- </para>
- </listitem>
- <listitem>
- <para>
- Der Index des Ausdrucks Verzeichnisses wird für jedes Segment vorgeladen (dieser
- Prozess nimmt für einfache Abfragen die meiste Zeit in Anspruch, und er benötigt
- auch zusätzlichen Speicher).
- </para>
- </listitem>
- </itemizedlist>
- <para>
- Wenn das Ausdrucks Verzeichnis einen Wendepunkt erreicht, dann ist die Suche durch ein
- Segment <emphasis>N</emphasis> in den meisten Fällen mal schneller als die Suche durch
- <emphasis>N</emphasis> Segmente.
- </para>
- <para>
- <emphasis>Index Optimierung</emphasis> verbindet zwei oder mehr Segmente in ein einzelnes
- Segment. Ein neues Segment wird der Liste der Index Segmente hinzugefügt, und alte Segmente
- werden ausgeschlossen.
- </para>
- <para>
- Aktualisierungen von Segment Listen werden als atomsche Operation durchgeführt. Das gibt
- die Möglichkeit gleichzeitig neue Dokumente hinzuzufügen, Index Operationen durchzuführen,
- und den Index zu durchsuchen.
- </para>
- <para>
- Die automatische Optimierung des Index wird nach jeder Segment Erzeugung durchgeführt. Sie
- verbindet Sets der kleinsten Segmente in größere Segmente, und größere Segmente in noch
- größere Segmente, wenn wir genug Segmente zum verbinden haben.
- </para>
- <para>
- Die automatische Optimierung wird von drei Optionen kontrolliert:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <emphasis>MaxBufferedDocs</emphasis> (die minimale Anzahl an notwendigen Dokumenten
- bevor die im Speicher gepufferten Dokumente in ein neues Segment geschrieben
- werden);
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>MaxMergeDocs</emphasis> (die größte Anzahl an Dokumenten die von einer
- Optimierungs Operation verbunden werden); und
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>MergeFactor</emphasis> (welcher definiert wie oft Segment Indezes von
- automatischen Optimierungs Operationen verbunden werden).
- </para>
- </listitem>
- </itemizedlist>
- <para>
- Wenn wir pro Skript Ausführung ein Dokument hinzufügen, wird
- <emphasis>MaxBufferedDocs</emphasis> nicht verwendet (es wird nur ein neues Segmente mit nur
- einem Dokument am Ende der Skript Ausführung erstellt, zu einer Zeit zu welcher der
- automatische Optimierungs Prozess startet).
- </para>
- </sect1>
|