lucene-index-structure.xml 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!-- EN-Revision: 24249 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="learning.lucene.index-structure">
  5. <title>Structure d'index Lucene</title>
  6. <para>
  7. Afin d'utiliser l'intégralité des fonctionnalités de
  8. <classname>Zend_Search_Lucene</classname> avec un maximum de performances, il est
  9. nécessaire que vous compreniez la structure interne d'un index.
  10. </para>
  11. <para>
  12. Un <emphasis>index</emphasis> est stocké dans un ensemble de fichier au sein d'un
  13. seul répertoire.
  14. </para>
  15. <para>
  16. Un <emphasis>index</emphasis> est un ensemble indépendant de
  17. <emphasis>segments</emphasis> dans lesquels sont stockées des informations au sujet d'un
  18. sous-ensemble de documents indexés. Chaque <emphasis>segment</emphasis> a son propre
  19. <emphasis>dictionnaire de terme</emphasis>, son propre index de dictionnaire de terme, et
  20. son propre stockage de document (valeur de champ stocké)
  21. <footnote>
  22. <para>Depuis Lucene 2.3, les fichiers de stockage de document peuvent être partagés
  23. entre les segments; cependant, <classname>Zend_Search_Lucene</classname> n'utilise pas
  24. cette possibilité</para>
  25. </footnote>.
  26. Toutes les informations de segments sont stockées dans un fichier
  27. <filename>_xxxxx.cfs</filename>, où <emphasis>xxxxx</emphasis> est le nom d'un
  28. segment.
  29. </para>
  30. <para>
  31. Dès qu'un fichier de segment d'index est créé, il ne peut être mis à jour. De
  32. nouveaux documents sont ajoutés à de nouveaux segments. Les documents supprimés sont
  33. seulement marqués comme supprimés dans un fichier facultatif
  34. <filename>&lt;segmentname&gt;.del</filename>.
  35. </para>
  36. <para>
  37. La mise à jour de document est effectuée en tant qu'opérations distincts de
  38. suppression et d'ajout, même si elle est effectuée en utilisant un appel à
  39. l'<acronym>API</acronym> <methodname>update()</methodname>
  40. <footnote>
  41. <para>Cet appel est fourni uniquement par Java Lucene pour le moment, mais il est prévu
  42. d'étendre l'<acronym>API</acronym> <classname>Zend_Search_Lucene</classname> avec une
  43. fonctionnalité similaire</para>
  44. </footnote>.
  45. Ceci simplifie l'ajout de nouveaux documents, et permet de mettre à jour
  46. simultanément à l'aide des opérations de recherche.
  47. </para>
  48. <para>
  49. D'un autre coté, utiliser plusieurs segments (avoir un document par segment est un
  50. cas exceptionnel) augmente le temps de recherche&#160;:
  51. </para>
  52. <itemizedlist>
  53. <listitem>
  54. <para>
  55. La récupération d'un terme depuis le dictionnaire est effectué pour chaque
  56. segment&#160;;
  57. </para>
  58. </listitem>
  59. <listitem>
  60. <para>
  61. Le dictionnaire de terme de l'index est préchargé pour chaque segment (ce
  62. processus occupe la plupart du temps de recherche pour de simples requêtes et
  63. nécessite aussi de la mémoire supplémentaire).
  64. </para>
  65. </listitem>
  66. </itemizedlist>
  67. <para>
  68. Si les termes du dictionnaires de recherche atteignent un point de saturation, la
  69. recherche à travers un segment est <emphasis>N</emphasis> fois plus rapide que la recherche
  70. à travers <emphasis>N</emphasis> segments dans la plupart des cas.
  71. </para>
  72. <para>
  73. <emphasis>L'optimisation d'index</emphasis> fusionne deux segments ou plus en un
  74. segment unique. Un nouveau segment est ajouté à la liste des segments de l'index, et les
  75. anciens segments sont exclus.
  76. </para>
  77. <para>
  78. La mise à jour de la liste de segments s'effectue de manière atomique. Ceci donne la
  79. capacité d'ajouter de nouveaux documents simultanément, d'effectuer des optimisations
  80. d'index, et de chercher à travers l'index.
  81. </para>
  82. <para>
  83. L'auto-optimisation d'index s'effectue après chaque génération de segment. Elle
  84. fusionne l'ensemble des plus petits segments en des segments plus grands, et les segments
  85. plus grands en des segments encore plus grands, si nous avons suffisamment de segments à
  86. fusionner.
  87. </para>
  88. <para>L'auto optimisation d'index est contrôlé par trois options&#160;:</para>
  89. <itemizedlist>
  90. <listitem>
  91. <para>
  92. <emphasis>MaxBufferedDocs</emphasis> (Le nombre minimal de documents requis
  93. avant que les documents mis en mémoire tampon soit écrits dans un nouveau
  94. segment)&#160;;
  95. </para>
  96. </listitem>
  97. <listitem>
  98. <para>
  99. <emphasis>MaxMergeDocs</emphasis> (Le plus grand nombre de documents
  100. fusionnés par une opération d'optimisation)&#160;; et
  101. </para>
  102. </listitem>
  103. <listitem>
  104. <para>
  105. <emphasis>MergeFactor</emphasis> (qui détermine la fréquence à laquelle les
  106. indices de segments sont fusionnés par les opérations d'auto-optimisation).
  107. </para>
  108. </listitem>
  109. </itemizedlist>
  110. <para>
  111. Si nous ajoutons un documents par exécution de script,
  112. <emphasis>MaxBufferedDocs</emphasis> n'est finalement pas utilisé (seul un segment avec un
  113. seul document est créé à la fin de l'exécution du script, moment auquel démarre le
  114. processus d'auto-optimisation).
  115. </para>
  116. </sect1>