| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 24249 -->
- <!-- Reviewed: no -->
- <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>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>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 language="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 <methodname>commit()</methodname>. 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 à <methodname>commit()</methodname> est simplement une sécurité pour éviter
- les problème d'exception dans le destructeur de
- <classname>Zend_Search_Lucene</classname> :<programlisting language="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>
|