| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 24249 -->
- <!-- Reviewed: no -->
- <sect1 id="zend.search.lucene.advanced">
- <title>Avançado</title>
- <sect2 id="zend.search.lucene.advanced.format_migration">
- <title>A partir da versão 1.6, manipulando as transformações no formato de índice</title>
- <para>
- O componente <classname>Zend_Search_Lucene</classname> trabalha com os formatos de
- índice Java Lucene 1.4-1.9, 2.1 e 2.3.
- </para>
- <para>
- O formato de índice corrente pode ser solicitado através da chamada
- <code>$index->getFormatVersion()</code>. Ela retorna um dos seguintes valores:
- <itemizedlist>
- <listitem>
- <para>
- <constant>Zend_Search_Lucene::FORMAT_PRE_2_1</constant> para o formato de
- índice Java Lucene 1.4-1.9.
- </para>
- </listitem>
- <listitem>
- <para>
- <constant>Zend_Search_Lucene::FORMAT_2_1</constant> para o formato de índice
- Java Lucene 2.1 (também usado para Lucene 2.2).
- </para>
- </listitem>
- <listitem>
- <para>
- <constant>Zend_Search_Lucene::FORMAT_2_3</constant> para o formato de índice
- Java Lucene 2.3.
- </para>
- </listitem>
- </itemizedlist>
- </para>
- <para>
- As modificações no índice são realizadas <emphasis>apenas</emphasis> se qualquer
- atualização do índice for feita. Isso acontece se um novo documento for adicionado a um
- índice ou uma otimização de índice for iniciada manualmente através da chamada
- <code>$index->optimize()</code>.
- </para>
- <para>
- Nesse caso, <classname>Zend_Search_Lucene</classname> pode converter o índice para a
- versão superior. Isso <emphasis>sempre</emphasis> acontece para os índices no formato
- <constant>Zend_Search_Lucene::FORMAT_PRE_2_1</constant>, que são automaticamente
- convertidos para o formato 2.1.
- </para>
- <para>
- Você pode gerenciar o processo de conversão e atribuir o formato de índice de destino
- com <code>$index->setFormatVersion()</code> que toma como parâmetro a constante
- <constant>Zend_Search_Lucene::FORMAT_2_1</constant> ou
- <constant>Zend_Search_Lucene::FORMAT_2_3</constant>:
- <itemizedlist>
- <listitem>
- <para>
- <constant>Zend_Search_Lucene::FORMAT_2_1</constant> na verdade não faz nada
- desde que os índices pré-2.1 são automaticamente convertidos para
- formato 2.1.
- </para>
- </listitem>
- <listitem>
- <para>
- <constant>Zend_Search_Lucene::FORMAT_2_3</constant> força a conversão para o
- formato 2.3.
- </para>
- </listitem>
- </itemizedlist>
- </para>
- <para>
- Conversões para versões anteriores de formatos não são suportadas.
- </para>
- <note>
- <title>Importante!</title>
- <para>
- Uma vez que o índice é convertido para a versão superior não pode ser convertido de
- volta. Por isso, faça um backup do seu índice quando você planejar a migração para a
- versão superior, mas querendo ter a possibilidade de converter para uma versão
- anterior.
- </para>
- </note>
- </sect2>
- <sect2 id="zend.search.lucene.advanced.static">
- <title>Usando o índice como propriedade estática</title>
- <para>
- The <classname>Zend_Search_Lucene</classname> object uses the destructor method to
- commit changes and clean up resources.
- </para>
- <para>
- It stores added documents in memory and dumps new index segment to disk depending on
- <code>MaxBufferedDocs</code> parameter.
- </para>
- <para>
- If <code>MaxBufferedDocs</code> limit is not reached then there are some "unsaved"
- documents which are saved as a new segment in the object's destructor method. The index
- auto-optimization procedure is invoked if necessary depending on the values of the
- <code>MaxBufferedDocs</code>, <code>MaxMergeDocs</code> and <code>MergeFactor</code>
- parameters.
- </para>
- <para>
- Static object properties (see below) are destroyed <emphasis>after</emphasis> the last
- line of the executed script.
- </para>
- <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>
- All the same, the destructor for static properties is correctly invoked at this point in
- the program's execution.
- </para>
- <para>
- One potential problem is exception handling. Exceptions thrown by destructors of static
- objects don't have context, because the destructor is executed after the script has
- already completed.
- </para>
- <para>
- You might see a "Fatal error: Exception thrown without a stack frame in Unknown on line
- 0" error message instead of exception description in such cases.
- </para>
- <para>
- <classname>Zend_Search_Lucene</classname> provides a workaround to this problem with the
- <methodname>commit()</methodname> method. It saves all unsaved changes and frees memory
- used for storing new segments. You are free to use the commit operation any time- or
- even several times- during script execution. You can still use the
- <classname>Zend_Search_Lucene</classname> object for searching, adding or deleting
- document after the commit operation. But the <methodname>commit()</methodname> call
- guarantees that if there are no document added or deleted after the call to
- <methodname>commit()</methodname>, then the <classname>Zend_Search_Lucene</classname>
- destructor has nothing to do and will not throw exception:
- </para>
- <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();
- ...
- // Rotina de desligamento do script
- ...
- Searcher::commit();
- ...
- ]]></programlisting>
- </sect2>
- </sect1>
|