Zend_Search_Lucene-Advanced.xml 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 24249 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.search.lucene.advanced">
  5. <title>Avancé</title>
  6. <sect2 id="zend.search.lucene.advanced.format_migration">
  7. <title>Depuis Zend Framework 1.6, gestion des transformations de format d'index</title>
  8. <para>
  9. <classname>Zend_Search_Lucene</classname> fonctionne avec les index Lucene Java
  10. 1.4-1.9, 2.1 et 2.3.
  11. </para>
  12. <para>
  13. Le format actuel de l'index peut être obtenu par
  14. <code>$index-&gt;getFormatVersion()</code>. Ceci retourne une de ces valeurs :
  15. <itemizedlist>
  16. <listitem>
  17. <para>
  18. <classname>Zend_Search_Lucene::FORMAT_PRE_2_1</classname> pour le
  19. format 1.4-1.9.
  20. </para>
  21. </listitem>
  22. <listitem>
  23. <para>
  24. <classname>Zend_Search_Lucene::FORMAT_2_1</classname> pour le format
  25. 2.1 (utilisé aussi pour 2.2).
  26. </para>
  27. </listitem>
  28. <listitem>
  29. <para>
  30. <classname>Zend_Search_Lucene::FORMAT_2_3</classname> pour le format
  31. 2.3.
  32. </para>
  33. </listitem>
  34. </itemizedlist>
  35. </para>
  36. <para>
  37. Les modifications de l'index n'arrivent <emphasis>que</emphasis> si une mise à
  38. jour de l'index est faite. Ceci arrive lorsqu'un nouveau document est ajouté à l'index,
  39. ou lors de l'optimisation manuelle de l'index par
  40. <code>$index-&gt;optimize()</code>.
  41. </para>
  42. <para>
  43. Dans un tel cas, Zend_Search_Lucene peut convertir l'index vers une version plus
  44. haute. Ceci arrive <emphasis>toujours</emphasis> pour le format
  45. <classname>Zend_Search_Lucene::FORMAT_PRE_2_1</classname>, alors transformé en format
  46. 2.1.
  47. </para>
  48. <para>
  49. Vous pouvez gérer ces conversions et notamment le format d'arrivée avec
  50. <code>$index-&gt;setFormatVersion()</code>, qui prend comme paramètre
  51. <classname>Zend_Search_Lucene::FORMAT_2_1</classname> ou
  52. <classname>Zend_Search_Lucene::FORMAT_2_3</classname> :<itemizedlist>
  53. <listitem>
  54. <para>
  55. <classname>Zend_Search_Lucene::FORMAT_2_1</classname> ne fait rien
  56. puisque les format pre-2.1 sont convertis vers ce format (2.1)
  57. </para>
  58. </listitem>
  59. <listitem>
  60. <para>
  61. <classname>Zend_Search_Lucene::FORMAT_2_3</classname> force la
  62. conversion vers le format 2.3.
  63. </para>
  64. </listitem>
  65. </itemizedlist>
  66. </para>
  67. <para>
  68. Les conversions vers des versions antérieure de formats ne sont pas
  69. supportées.
  70. </para>
  71. <note>
  72. <title>Important!</title>
  73. <para>
  74. Les formats ne peuvent pas être convertis vers des versions antérieures.
  75. Gardez une copie de sauvegarde si ceci s'avère nécessaire, car après une conversion
  76. il ne sera plus possible de faire marche arrière.
  77. </para>
  78. </note>
  79. </sect2>
  80. <sect2 id="zend.search.lucene.advanced.static">
  81. <title>Utiliser les propriétés statiques de l'index</title>
  82. <para>
  83. L'objet <classname>Zend_Search_Lucene</classname> utilise la méthode de
  84. destructeur pour valider ses changements et faire ses optimisations et
  85. nettoyages.
  86. </para>
  87. <para>
  88. Il stocke les documents ajoutés en mémoire et les vide dans un segment sur le
  89. disque en fonction du paramètre <code>MaxBufferedDocs</code>.
  90. </para>
  91. <para>
  92. Si la limite <code>MaxBufferedDocs</code> n'est pas atteinte, alors il y aura des
  93. documents non sauvegardés qui seront sauvés comme nouveau segment lors de la destruction
  94. de l'objet. La procédure d'optimisation automatique est lancée si nécessaire, cela
  95. dépend des paramètres <code>MaxBufferedDocs</code>, <code>MaxMergeDocs</code> et
  96. <code>MergeFactor</code>.
  97. </para>
  98. <para>
  99. Les propriétés statiques d'un objet sont détruites <emphasis>après</emphasis> la
  100. dernière ligne de code exécutée. <programlisting language="php"><![CDATA[
  101. class Searcher {
  102. private static $_index;
  103. public static function initIndex() {
  104. self::$_index = Zend_Search_Lucene::open('path/to/index');
  105. }
  106. }
  107. Searcher::initIndex();
  108. ]]></programlisting></para>
  109. <para>
  110. Aussi, le destructeur est correctement invoqué à ce point de l'exécution du
  111. programme.
  112. </para>
  113. <para>
  114. Un problème potentiel peut être les exceptions. Celles envoyées dans un
  115. destructeur d'un objet statique n'ont pas de contexte, car le destructeur est appelé
  116. après la fin d'exécution du script.
  117. </para>
  118. <para>
  119. Vous pouvez alors voir une "Fatal error: Exception thrown without a stack frame in
  120. Unknown on line 0" au lieu de l'exception décrivant réellement le contexte.
  121. </para>
  122. <para>
  123. <classname>Zend_Search_Lucene</classname> propose alors un détournement de ce
  124. problème avec la méthode <methodname>commit()</methodname>. Elle sauvegarde les changements et
  125. libère la mémoire utilisée pour stocker les segments. Vous pouvez utiliser la méthode
  126. commit n'importe quand, même plusieurs fois, pendant l'exécution de votre script. Vous
  127. pouvez aussi continuer à utiliser l'objet <classname>Zend_Search_Lucene</classname> pour
  128. rechercher, ajouter ou supprimer des document, même après une opération de commit
  129. (validation). L'appel à <methodname>commit()</methodname> est simplement une sécurité pour éviter
  130. les problème d'exception dans le destructeur de
  131. <classname>Zend_Search_Lucene</classname> :<programlisting language="php"><![CDATA[
  132. class Searcher {
  133. private static $_index;
  134. public static function initIndex() {
  135. self::$_index = Zend_Search_Lucene::open('path/to/index');
  136. }
  137. ...
  138. public static function commit() {
  139. self::$_index->commit();
  140. }
  141. }
  142. Searcher::initIndex();
  143. ...
  144. // Script shutdown routine
  145. ...
  146. Searcher::commit();
  147. ...
  148. ]]></programlisting></para>
  149. </sect2>
  150. </sect1>