| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- <?xml version="1.0" encoding="utf-8"?>
- <!-- EN-Revision: 24249 -->
- <!-- Reviewed: no -->
- <sect1 id="learning.lucene.index-structure">
- <title>Structure d'index Lucene</title>
- <para>
- Afin d'utiliser l'intégralité des fonctionnalités de
- <classname>Zend_Search_Lucene</classname> avec un maximum de performances, il est
- nécessaire que vous compreniez la structure interne d'un index.
- </para>
- <para>
- Un <emphasis>index</emphasis> est stocké dans un ensemble de fichier au sein d'un
- seul répertoire.
- </para>
- <para>
- Un <emphasis>index</emphasis> est un ensemble indépendant de
- <emphasis>segments</emphasis> dans lesquels sont stockées des informations au sujet d'un
- sous-ensemble de documents indexés. Chaque <emphasis>segment</emphasis> a son propre
- <emphasis>dictionnaire de terme</emphasis>, son propre index de dictionnaire de terme, et
- son propre stockage de document (valeur de champ stocké)
- <footnote>
- <para>Depuis Lucene 2.3, les fichiers de stockage de document peuvent être partagés
- entre les segments; cependant, <classname>Zend_Search_Lucene</classname> n'utilise pas
- cette possibilité</para>
- </footnote>.
- Toutes les informations de segments sont stockées dans un fichier
- <filename>_xxxxx.cfs</filename>, où <emphasis>xxxxx</emphasis> est le nom d'un
- segment.
- </para>
- <para>
- Dès qu'un fichier de segment d'index est créé, il ne peut être mis à jour. De
- nouveaux documents sont ajoutés à de nouveaux segments. Les documents supprimés sont
- seulement marqués comme supprimés dans un fichier facultatif
- <filename><segmentname>.del</filename>.
- </para>
- <para>
- La mise à jour de document est effectuée en tant qu'opérations distincts de
- suppression et d'ajout, même si elle est effectuée en utilisant un appel à
- l'<acronym>API</acronym> <methodname>update()</methodname>
- <footnote>
- <para>Cet appel est fourni uniquement par Java Lucene pour le moment, mais il est prévu
- d'étendre l'<acronym>API</acronym> <classname>Zend_Search_Lucene</classname> avec une
- fonctionnalité similaire</para>
- </footnote>.
- Ceci simplifie l'ajout de nouveaux documents, et permet de mettre à jour
- simultanément à l'aide des opérations de recherche.
- </para>
- <para>
- D'un autre coté, utiliser plusieurs segments (avoir un document par segment est un
- cas exceptionnel) augmente le temps de recherche :
- </para>
- <itemizedlist>
- <listitem>
- <para>
- La récupération d'un terme depuis le dictionnaire est effectué pour chaque
- segment ;
- </para>
- </listitem>
- <listitem>
- <para>
- Le dictionnaire de terme de l'index est préchargé pour chaque segment (ce
- processus occupe la plupart du temps de recherche pour de simples requêtes et
- nécessite aussi de la mémoire supplémentaire).
- </para>
- </listitem>
- </itemizedlist>
- <para>
- Si les termes du dictionnaires de recherche atteignent un point de saturation, la
- recherche à travers un segment est <emphasis>N</emphasis> fois plus rapide que la recherche
- à travers <emphasis>N</emphasis> segments dans la plupart des cas.
- </para>
- <para>
- <emphasis>L'optimisation d'index</emphasis> fusionne deux segments ou plus en un
- segment unique. Un nouveau segment est ajouté à la liste des segments de l'index, et les
- anciens segments sont exclus.
- </para>
- <para>
- La mise à jour de la liste de segments s'effectue de manière atomique. Ceci donne la
- capacité d'ajouter de nouveaux documents simultanément, d'effectuer des optimisations
- d'index, et de chercher à travers l'index.
- </para>
- <para>
- L'auto-optimisation d'index s'effectue après chaque génération de segment. Elle
- fusionne l'ensemble des plus petits segments en des segments plus grands, et les segments
- plus grands en des segments encore plus grands, si nous avons suffisamment de segments à
- fusionner.
- </para>
- <para>L'auto optimisation d'index est contrôlé par trois options :</para>
- <itemizedlist>
- <listitem>
- <para>
- <emphasis>MaxBufferedDocs</emphasis> (Le nombre minimal de documents requis
- avant que les documents mis en mémoire tampon soit écrits dans un nouveau
- segment) ;
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>MaxMergeDocs</emphasis> (Le plus grand nombre de documents
- fusionnés par une opération d'optimisation) ; et
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>MergeFactor</emphasis> (qui détermine la fréquence à laquelle les
- indices de segments sont fusionnés par les opérations d'auto-optimisation).
- </para>
- </listitem>
- </itemizedlist>
- <para>
- Si nous ajoutons un documents par exécution de script,
- <emphasis>MaxBufferedDocs</emphasis> n'est finalement pas utilisé (seul un segment avec un
- seul document est créé à la fin de l'exécution du script, moment auquel démarre le
- processus d'auto-optimisation).
- </para>
- </sect1>
|