Zend_Search_Lucene-Advanced.xml 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 24249 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.search.lucene.advanced">
  5. <title>Avançado</title>
  6. <sect2 id="zend.search.lucene.advanced.format_migration">
  7. <title>A partir da versão 1.6, manipulando as transformações no formato de índice</title>
  8. <para>
  9. O componente <classname>Zend_Search_Lucene</classname> trabalha com os formatos de
  10. índice Java Lucene 1.4-1.9, 2.1 e 2.3.
  11. </para>
  12. <para>
  13. O formato de índice corrente pode ser solicitado através da chamada
  14. <code>$index->getFormatVersion()</code>. Ela retorna um dos seguintes valores:
  15. <itemizedlist>
  16. <listitem>
  17. <para>
  18. <constant>Zend_Search_Lucene::FORMAT_PRE_2_1</constant> para o formato de
  19. índice Java Lucene 1.4-1.9.
  20. </para>
  21. </listitem>
  22. <listitem>
  23. <para>
  24. <constant>Zend_Search_Lucene::FORMAT_2_1</constant> para o formato de índice
  25. Java Lucene 2.1 (também usado para Lucene 2.2).
  26. </para>
  27. </listitem>
  28. <listitem>
  29. <para>
  30. <constant>Zend_Search_Lucene::FORMAT_2_3</constant> para o formato de índice
  31. Java Lucene 2.3.
  32. </para>
  33. </listitem>
  34. </itemizedlist>
  35. </para>
  36. <para>
  37. As modificações no índice são realizadas <emphasis>apenas</emphasis> se qualquer
  38. atualização do índice for feita. Isso acontece se um novo documento for adicionado a um
  39. índice ou uma otimização de índice for iniciada manualmente através da chamada
  40. <code>$index->optimize()</code>.
  41. </para>
  42. <para>
  43. Nesse caso, <classname>Zend_Search_Lucene</classname> pode converter o índice para a
  44. versão superior. Isso <emphasis>sempre</emphasis> acontece para os índices no formato
  45. <constant>Zend_Search_Lucene::FORMAT_PRE_2_1</constant>, que são automaticamente
  46. convertidos para o formato 2.1.
  47. </para>
  48. <para>
  49. Você pode gerenciar o processo de conversão e atribuir o formato de índice de destino
  50. com <code>$index->setFormatVersion()</code> que toma como parâmetro a constante
  51. <constant>Zend_Search_Lucene::FORMAT_2_1</constant> ou
  52. <constant>Zend_Search_Lucene::FORMAT_2_3</constant>:
  53. <itemizedlist>
  54. <listitem>
  55. <para>
  56. <constant>Zend_Search_Lucene::FORMAT_2_1</constant> na verdade não faz nada
  57. desde que os índices pré-2.1 são automaticamente convertidos para
  58. formato 2.1.
  59. </para>
  60. </listitem>
  61. <listitem>
  62. <para>
  63. <constant>Zend_Search_Lucene::FORMAT_2_3</constant> força a conversão para o
  64. formato 2.3.
  65. </para>
  66. </listitem>
  67. </itemizedlist>
  68. </para>
  69. <para>
  70. Conversões para versões anteriores de formatos não são suportadas.
  71. </para>
  72. <note>
  73. <title>Importante!</title>
  74. <para>
  75. Uma vez que o índice é convertido para a versão superior não pode ser convertido de
  76. volta. Por isso, faça um backup do seu índice quando você planejar a migração para a
  77. versão superior, mas querendo ter a possibilidade de converter para uma versão
  78. anterior.
  79. </para>
  80. </note>
  81. </sect2>
  82. <sect2 id="zend.search.lucene.advanced.static">
  83. <title>Usando o índice como propriedade estática</title>
  84. <para>
  85. The <classname>Zend_Search_Lucene</classname> object uses the destructor method to
  86. commit changes and clean up resources.
  87. </para>
  88. <para>
  89. It stores added documents in memory and dumps new index segment to disk depending on
  90. <code>MaxBufferedDocs</code> parameter.
  91. </para>
  92. <para>
  93. If <code>MaxBufferedDocs</code> limit is not reached then there are some "unsaved"
  94. documents which are saved as a new segment in the object's destructor method. The index
  95. auto-optimization procedure is invoked if necessary depending on the values of the
  96. <code>MaxBufferedDocs</code>, <code>MaxMergeDocs</code> and <code>MergeFactor</code>
  97. parameters.
  98. </para>
  99. <para>
  100. Static object properties (see below) are destroyed <emphasis>after</emphasis> the last
  101. line of the executed script.
  102. </para>
  103. <programlisting language="php"><![CDATA[
  104. class Searcher {
  105. private static $_index;
  106. public static function initIndex() {
  107. self::$_index = Zend_Search_Lucene::open('path/to/index');
  108. }
  109. }
  110. Searcher::initIndex();
  111. ]]></programlisting>
  112. <para>
  113. All the same, the destructor for static properties is correctly invoked at this point in
  114. the program's execution.
  115. </para>
  116. <para>
  117. One potential problem is exception handling. Exceptions thrown by destructors of static
  118. objects don't have context, because the destructor is executed after the script has
  119. already completed.
  120. </para>
  121. <para>
  122. You might see a "Fatal error: Exception thrown without a stack frame in Unknown on line
  123. 0" error message instead of exception description in such cases.
  124. </para>
  125. <para>
  126. <classname>Zend_Search_Lucene</classname> provides a workaround to this problem with the
  127. <methodname>commit()</methodname> method. It saves all unsaved changes and frees memory
  128. used for storing new segments. You are free to use the commit operation any time- or
  129. even several times- during script execution. You can still use the
  130. <classname>Zend_Search_Lucene</classname> object for searching, adding or deleting
  131. document after the commit operation. But the <methodname>commit()</methodname> call
  132. guarantees that if there are no document added or deleted after the call to
  133. <methodname>commit()</methodname>, then the <classname>Zend_Search_Lucene</classname>
  134. destructor has nothing to do and will not throw exception:
  135. </para>
  136. <programlisting language="php"><![CDATA[
  137. class Searcher {
  138. private static $_index;
  139. public static function initIndex() {
  140. self::$_index = Zend_Search_Lucene::open('path/to/index');
  141. }
  142. ...
  143. public static function commit() {
  144. self::$_index->commit();
  145. }
  146. }
  147. Searcher::initIndex();
  148. ...
  149. // Rotina de desligamento do script
  150. ...
  151. Searcher::commit();
  152. ...
  153. ]]></programlisting>
  154. </sect2>
  155. </sect1>