| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- <!-- EN-Revision: 14448 -->
- <sect1 id="zend.search.lucene.advanced">
- <title>Avancé</title>
- <sect2 id="zend.search.lucene.advanced.format_migration">
- <title>Depuis Zend Framework 1.6, gestion des transformations de format d'index.</title>
- <para><classname>Zend_Search_Lucene</classname> fonctionne avec les index Lucene Java 1.4-1.9, 2.1 et 2.3.</para>
- <para>Le format actuel de l'index peut être obtenu par <code>$index->getFormatVersion()</code>. Ceci retourne
- une de ces valeurs : <itemizedlist>
- <listitem>
- <para><classname>Zend_Search_Lucene::FORMAT_PRE_2_1</classname> pour le format 1.4-1.9.</para>
- </listitem>
- <listitem>
- <para><classname>Zend_Search_Lucene::FORMAT_2_1</classname> pour le format 2.1 (utilisé aussi pour
- 2.2).</para>
- </listitem>
- <listitem>
- <para><classname>Zend_Search_Lucene::FORMAT_2_3</classname> pour le format 2.3.</para>
- </listitem>
- </itemizedlist></para>
- <para>Les modifications de l'index n'arrivent <emphasis role="strong">que</emphasis> si une mise à jour de
- l'index est faite. Ceci arrive lorsqu'un nouveau document est ajouté à l'index, ou lors de l'optimisation
- manuelle de l'index par <code>$index->optimize()</code>.</para>
- <para>Dans un tel cas, Zend_Search_Lucene peut convertir l'index vers une version plus haute. Ceci arrive
- <emphasis role="strong">toujours</emphasis> pour le format <classname>Zend_Search_Lucene::FORMAT_PRE_2_1</classname>,
- alors transformé en format 2.1.</para>
- <para>Vous pouvez gérer ces conversions et notamment le format d'arrivée avec
- <code>$index->setFormatVersion()</code>, qui prend comme paramètre
- <classname>Zend_Search_Lucene::FORMAT_2_1</classname> ou <classname>Zend_Search_Lucene::FORMAT_2_3</classname> :<itemizedlist>
- <listitem>
- <para><classname>Zend_Search_Lucene::FORMAT_2_1</classname> ne fait rien puisque les format pre-2.1 sont
- convertis vers ce format (2.1)</para>
- </listitem>
- <listitem>
- <para><classname>Zend_Search_Lucene::FORMAT_2_3</classname> force la conversion vers le format 2.3.</para>
- </listitem>
- </itemizedlist></para>
- <para>Les conversions vers des versions antérieure de formats ne sont pas supportées.</para>
- <note>
- <title>Important!</title>
- <para>Les formats ne peuvent pas être convertis vers des versions antérieures. Gardez une copie de
- sauvegarde si ceci s'avère nécessaire, car après une conversion il ne sera plus possible de faire marche
- arrière.</para>
- </note>
- </sect2>
- <sect2 id="zend.search.lucene.advanced.static">
- <title>Utiliser les propriétés statiques de l'index</title>
- <para>L'objet <classname>Zend_Search_Lucene</classname> utilise la méthode de destructeur pour valider ses changements et
- faire ses optimisations et nettoyages.</para>
- <para>Il stocke les documents ajoutés en mémoire et les vide dans un segment sur le disque en fonction du
- paramètre <code>MaxBufferedDocs</code>.</para>
- <para>Si la limite <code>MaxBufferedDocs</code> n'est pas atteinte, alors il y aura des documents non
- sauvegardés qui seront sauvés comme nouveau segment lors de la destruction de l'objet. La procédure
- d'optimisation automatique est lancée si nécessaire, cela dépend des paramètres <code>MaxBufferedDocs</code>,
- <code>MaxMergeDocs</code> et <code>MergeFactor</code>.</para>
- <para>Les propriétés statiques d'un objet sont détruites <emphasis>après</emphasis> la dernière ligne de code
- exécutée. <programlisting role="php"><![CDATA[
- class Searcher {
- private static $_index;
- public static function initIndex() {
- self::$_index = Zend_Search_Lucene::open('path/to/index');
- }
- }
- Searcher::initIndex();
- ]]></programlisting></para>
- <para>Aussi, le destructeur est correctement invoqué à ce point de l'exécution du programme.</para>
- <para>Un problème potentiel peut être les exceptions. Celles envoyées dans un destructeur d'un objet statique
- n'ont pas de contexte, car le destructeur est appelé après la fin d'exécution du script.</para>
- <para>Vous pouvez alors voir une "Fatal error: Exception thrown without a stack frame in Unknown on line 0" au
- lieu de l'exception décrivant réellement le contexte.</para>
- <para><classname>Zend_Search_Lucene</classname> propose alors un détournement de ce problème avec la méthode
- <code>commit()</code>. Elle sauvegarde les changements et libère la mémoire utilisée pour stocker les segments.
- Vous pouvez utiliser la méthode commit n'importe quand, même plusieurs fois, pendant l'exécution de votre
- script. Vous pouvez aussi continuer à utiliser l'objet <classname>Zend_Search_Lucene</classname> pour rechercher, ajouter
- ou supprimer des document, même après une opération de commit (validation). L'appel à <code>commit()</code> est
- simplement une sécurité pour éviter les problème d'exception dans le destructeur de
- <classname>Zend_Search_Lucene</classname> :<programlisting role="php"><![CDATA[
- class Searcher {
- private static $_index;
- public static function initIndex() {
- self::$_index = Zend_Search_Lucene::open('path/to/index');
- }
- ...
- public static function commit() {
- self::$_index->commit();
- }
- }
- Searcher::initIndex();
- ...
- // Script shutdown routine
- ...
- Searcher::commit();
- ...
- ]]></programlisting></para>
- </sect2>
- </sect1>
|