Explorar o código

[MANUAL] Brazilian Portuguese: sync

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@20642 44c647ce-9c0f-0410-b52a-842ac1e357ba
mauriciofauth %!s(int64=16) %!d(string=hai) anos
pai
achega
9c96751a31

+ 10 - 9
documentation/manual/pt-br/module_specs/Zend_Barcode-Objects.xml

@@ -37,7 +37,7 @@
         </listitem>
 
         <listitem>
-            <para>Através de setters individuais para cada tipo de configuração.</para>
+            <para>Através de métodos de acesso individuais para cada tipo de configuração.</para>
         </listitem>
     </itemizedlist>
 
@@ -59,7 +59,7 @@ $config  = new Zend_Config($options);
 $barcode = new Zend_Barcode_Object_Code39();
 $barcode->setConfig($config);
 
-// Caso 4: setters individuais
+// Caso 4: métodos de acesso individuais
 $barcode = new Zend_Barcode_Object_Code39();
 $barcode->setText('ZEND-FRAMEWORK')
         ->setBarHeight(40);
@@ -73,10 +73,11 @@ $barcode->setText('ZEND-FRAMEWORK')
             Na lista seguinte, os valores não têm unidades; usaremos o termo "unidade". Por exemplo,
             o valor padrão da "barra fina" é "1 unidade". As unidades reais dependem do suporte de
             renderização (veja <link linkend="zend.barcode.renderers">a documentação dos
-                renderizadores</link> para mais informações). Os setters são nomeados mudando a
-            letra inicial da opção para maiúscula e colocando o prefixo "set" (por exemplo
-            "barHeight" se torna "setBarHeight"). Todas as opções têm um getter correspondente com
-            prefixo "get" (por exemplo "getBarHeight"). As opções disponíveis são:
+                renderizadores</link> para mais informações). Os métodos de acesso são nomeados
+            mudando a letra inicial da opção para maiúscula e colocando o prefixo "set" (por exemplo
+            "barHeight" se torna "setBarHeight"). Todas as opções têm um método de leitura
+            correspondente com prefixo "get" (por exemplo "getBarHeight"). As opções disponíveis
+            são:
         </para>
 
         <table id="zend.barcode.objects.common.options.table">
@@ -324,17 +325,17 @@ Zend_Barcode::render(
     </sect2>
 
     <sect2 id="zend.barcode.objects.common.getters">
-        <title>Getters Adicionais Comuns</title>
+        <title>Métodos de Leitura Comuns Adicionais</title>
 
         <para></para>
 
         <table id="zend.barcode.objects.common.getters.table">
-            <title>Getters Comuns</title>
+            <title>Métodos de Leitura Comuns</title>
 
             <tgroup cols="3">
                 <thead>
                     <row>
-                        <entry>Getter</entry>
+                        <entry>Método de Leitura</entry>
 
                         <entry>Tipo de Dado</entry>
 

+ 153 - 44
documentation/manual/pt-br/module_specs/Zend_Search_Lucene-Charset.xml

@@ -1,51 +1,160 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- EN-Revision: 17175 -->
+<!-- Reviewed: no -->
 <sect1 id="zend.search.lucene.charset">
-  <title>Conjuntos de Caracteres</title>
-
-  <sect2 id="zend.search.lucene.charset.description">
-    <title>Suporte aos conjuntos de caracteres UTF-8 e byte-simples.</title>
-
-    <para>Zend_Search_Lucene foi projetado para trabalhar com conjuntos de
-    caracteres UTF-8. Arquivos de índice armazenam dados unicode no formato de
-    codificação "UTF-8 modificado" usado pelo Java. O núcleo do
-    Zend_Search_Lucene suporta-os plenamente, com uma exceção: <footnote>
-        <para>Zend_Search_Lucene suporta somente os caracteres do Plano
-        Multilingual Básico (BMP) (de 0x0000 a 0xFFFF), não suportando os
-        caracteres suplementares (caracteres acima de 0xFFFF)</para>
-
-        <para>O Java 2 representa estes caracteres como um par de valores do
-        tipo char (16 bits), o primeiro vem da faixa superior (0xD800-0xDBFF),
-        o segundo, da faixa inferior (0xDC00-0xDFFF). Logo eles são
-        codificados como caracteres usuais UTF-8 em seis bytes. A
-        representação padrão UTF-8 utiliza quatro bytes para caracteres
-        suplementares.</para>
-      </footnote></para>
-
-    <para>Em todo caso, tanto os analizadores de texto, quanto os
-    interpretadores e processadores de consultas, utilizam a função
-    ctype_alpha() para tokenizar os textos e as consultas. A função
-    ctype_alpha() não suporta UTF-8 e sua substituição deve ser considerada em
-    um futuro próximo.</para>
-
-    <para>Por enquanto, recomendamos a conversão dos dados para a
-    representação ASCII. <footnote>
-        <para>Se os dados estiverem em formato UTF-8 ou, obrigatoriamente,
-        contiverem caracteres inexistentes em ASCII.</para>
-      </footnote> (isso vale tanto para consultas, quanto para armazenagem de
-    documentos fonte):</para>
-
-    <programlisting role="php">&lt;?php
+    <title>Conjunto de Caractere</title>
+
+    <sect2 id="zend.search.lucene.charset.description">
+        <title>Suporte ao conjunto de caractere UTF-8 e byte-simples</title>
+
+        <para>
+            <classname>Zend_Search_Lucene</classname> trabalha internamente com o conjunto de
+            caractere UTF-8. Arquivos de índice armazenam dados unicode no formato de codificação
+            "UTF-8 modificado" usado pelo Java. O núcleo do
+            <classname>Zend_Search_Lucene</classname> suporta esta codificação plenamente, com uma
+            exceção.
+            <footnote>
+               <para>
+                   <classname>Zend_Search_Lucene</classname> suporta somente os caracteres do Plano
+                   Multilingual Básico (BMP) (de 0x0000 a 0xFFFF), não suportando os caracteres
+                   suplementares (caracteres acima de 0xFFFF)
+               </para>
+
+               <para>
+                   O Java 2 representa estes caracteres como um par de valores do tipo char
+                   (16 bits), o primeiro vem da faixa superior (0xD800-0xDBFF), o segundo, da faixa
+                   inferior (0xDC00-0xDFFF). Logo eles são codificados como caracteres usuais UTF-8
+                   em seis bytes. A representação padrão UTF-8 utiliza quatro bytes para caracteres
+                   suplementares.
+               </para>
+            </footnote>
+        </para>
+
+        <para>
+            Actual input data encoding may be specified through <classname>Zend_Search_Lucene</classname> <acronym>API</acronym>. Data will
+            be automatically converted into UTF-8 encoding.
+        </para>
+    </sect2>
+
+    <sect2 id="zend.search.lucene.charset.default_analyzer">
+        <title>Default text analyzer</title>
+        <para>
+            However, the default text analyzer (which is also used within query parser) uses
+            ctype_alpha() for tokenizing text and queries.
+        </para>
+
+        <para>
+            ctype_alpha() is not UTF-8 compatible, so the analyzer converts text to 'ASCII//TRANSLIT' encoding before
+            indexing. The same processing is transparently performed during query parsing.
+            <footnote>
+               <para>
+                   Conversion to 'ASCII//TRANSLIT' may depend on current locale and OS.
+               </para>
+            </footnote>
+        </para>
+
+        <note>
+            <title/>
+            <para>
+                Default analyzer doesn't treats numbers as parts of terms. Use corresponding 'Num' analyzer if you don't want words
+                to be broken by numbers.
+            </para>
+        </note>
+    </sect2>
+
+    <sect2 id="zend.search.lucene.charset.utf_analyzer">
+        <title>UTF-8 compatible text analyzers</title>
+
+        <para>
+            <classname>Zend_Search_Lucene</classname> also contains a set of UTF-8 compatible analyzers: <classname>Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8</classname>,
+            <classname>Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8Num</classname>, <classname>Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8_CaseInsensitive</classname>,
+            <classname>Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8Num_CaseInsensitive</classname>.
+        </para>
+
+        <para>
+             Any of this analyzers can be enabled with the code like this:
+
+            <programlisting language="php"><![CDATA[
+Zend_Search_Lucene_Analysis_Analyzer::setDefault(
+    new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8());
+]]></programlisting>
+        </para>
+
+        <warning>
+            <title/>
+            <para>
+                UTF-8 compatible analyzers were improved in Zend Framework 1.5. Early versions of analyzers assumed
+                all non-ascii characters are letters. New analyzers implementation has more accurate behavior.
+            </para>
+            <para>
+                This may need you to re-build index to have data and search queries tokenized in the same way, otherwise search engine
+                may return wrong result sets.
+            </para>
+        </warning>
+
+        <para>
+            All of these analyzers need PCRE (Perl-compatible regular expressions) library to be compiled with UTF-8 support turned on.
+            PCRE UTF-8 support is turned on for the PCRE library sources bundled with <acronym>PHP</acronym> source code distribution, but if shared library is used
+            instead of bundled with <acronym>PHP</acronym> sources, then UTF-8 support state may depend on you operating system.
+        </para>
+
+        <para>
+             Use the following code to check, if PCRE UTF-8 support is enabled:
+
+            <programlisting language="php"><![CDATA[
+if (@preg_match('/\pL/u', 'a') == 1) {
+    echo "PCRE unicode support is turned on.\n";
+} else {
+    echo "PCRE unicode support is turned off.\n";
+}
+]]></programlisting>
+        </para>
+
+        <para>
+            Case insensitive versions of UTF-8 compatible analyzers also need <ulink url="http://www.php.net/manual/en/ref.mbstring.php">mbstring</ulink> extension to be enabled.
+        </para>
+
+        <para>
+            If you don't want mbstring extension to be turned on, but need case insensitive search, you may use the following approach: normalize source data before indexing
+            and query string before searching by converting them to lowercase:
+
+            <programlisting language="php"><![CDATA[
+// Indexing
+setlocale(LC_CTYPE, 'de_DE.iso-8859-1');
+
+...
+
+Zend_Search_Lucene_Analysis_Analyzer::setDefault(
+    new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8());
+
+...
+
 $doc = new Zend_Search_Lucene_Document();
+
+$doc->addField(Zend_Search_Lucene_Field::UnStored('contents',
+                                                  strtolower($contents)));
+
+// Title field for search through (indexed, unstored)
+$doc->addField(Zend_Search_Lucene_Field::UnStored('title',
+                                                  strtolower($title)));
+
+// Title field for retrieving (unindexed, stored)
+$doc->addField(Zend_Search_Lucene_Field::UnIndexed('_title', $title));
+]]></programlisting>
+
+            <programlisting language="php"><![CDATA[
+// Searching
+setlocale(LC_CTYPE, 'de_DE.iso-8859-1');
+
 ...
-$docText = iconv('ISO-8859-1', 'ASCII//TRANSLIT', $docText);
-$doc-&gt;addField(Zend_Search_Lucene_Field::UnStored('contents', $docText));
+
+Zend_Search_Lucene_Analysis_Analyzer::setDefault(
+    new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8());
 
 ...
 
-$query = iconv('', 'ASCII//TRANSLIT', $query);
-$hits = $index-&gt;find($query);
-?&gt;</programlisting>
-  </sect2>
+$hits = $index->find(strtolower($query));
+]]></programlisting>
+        </para>
+    </sect2>
 </sect1>
-<!--
-vim:se ts=4 sw=4 et:
--->

+ 349 - 200
documentation/manual/pt-br/module_specs/Zend_Search_Lucene-Extending.xml

@@ -1,172 +1,314 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- EN-Revision: 18739 -->
+<!-- Reviewed: no -->
 <sect1 id="zend.search.lucene.extending">
-  <title>Extensibilidade</title>
-
-  <sect2 id="zend.search.lucene.extending.analysis">
-    <title>Análise de Texto</title>
-
-    <para>A classe <code>Zend_Search_Lucene_Analysis_Analyzer</code> class é
-    usada pelo indexador para "tokenizar" campos de documentos de
-    texto.</para>
-
-    <para>Os métodos
-    <code>Zend_Search_Lucene_Analysis_Analyzer::getDefault()</code> e
-    <code>Zend_Search_Lucene_Analysis_Analyzer::setDefault()</code> são usados
-    para obter e setar, respectivamente, o analisador padrão.</para>
-
-    <para>Dessa forma você pode estipular o seu próprio analisador de textos
-    ou selecioná-lo dentre uma lista de analisadores prédefinidos:
-    <code>Zend_Search_Lucene_Analysis_Analyzer_Common_Text</code> e
-    <code>Zend_Search_Lucene_Analysis_Analyzer_Common_Text_CaseInsensitive</code>
-    (default). Ambos interpretam um "token" como uma sequencia de letras.
-    <code>Zend_Search_Lucene_Analysis_Analyzer_Common_Text_CaseInsensitive</code>
-    converte os "tokens" para caixa baixa.</para>
-
-    <para>Para selecionar um analisador utilize o código:</para>
-
-    <programlisting role="php">&lt;?php
-
+    <title>Extensibilidade</title>
+
+    <sect2 id="zend.search.lucene.extending.analysis">
+        <title>Análise de Texto</title>
+
+        <para>
+            A classe <classname>Zend_Search_Lucene_Analysis_Analyzer</classname> é usada pelo
+            indexador para "tokenizar" campos de documentos de texto.
+        </para>
+
+        <para>
+            Os métodos <methodname>Zend_Search_Lucene_Analysis_Analyzer::getDefault()</methodname> e
+            <code>Zend_Search_Lucene_Analysis_Analyzer::setDefault()</code> são usados para obter e
+            setar, respectivamente, o analisador padrão.
+        </para>
+
+        <para>
+            Você pode estipular o seu próprio analisador de textos ou selecioná-lo dentre uma lista
+            de analisadores prédefinidos:
+            <classname>Zend_Search_Lucene_Analysis_Analyzer_Common_Text</classname> e
+            <classname>Zend_Search_Lucene_Analysis_Analyzer_Common_Text_CaseInsensitive</classname>
+            (padrão). Ambos interpretam os "tokens" como sequencias de letras.
+            <classname>Zend_Search_Lucene_Analysis_Analyzer_Common_Text_CaseInsensitive</classname>
+            converte todos os "tokens" para caixa baixa.
+        </para>
+
+        <para>
+            Para selecionar um analisador:
+        </para>
+
+        <programlisting language="php"><![CDATA[
 Zend_Search_Lucene_Analysis_Analyzer::setDefault(
     new Zend_Search_Lucene_Analysis_Analyzer_Common_Text());
 ...
-$index-&gt;addDocument($doc);
-
-?&gt;</programlisting>
-
-    <para><code>Zend_Search_Lucene_Analysis_Analyzer_Common</code> foi
-    projetado ser o pai de todos os analisadores definidos pelo usuário. O
-    usuário só precisa definir o método <code>tokenize()</code>, que receberá
-    os dados de entrada como uma string e retornará um array de
-    "tokens".</para>
-
-    <para>O método <code>tokenize()</code> deve aplicar o método
-    <code>normalize()</code> a todos os "tokens". Ele permite o uso de filtros
-    de "token" junto com o seu analisador.</para>
-
-    <para>Aqui está um exemplo de um analisador customizado, que aceita tanto
-    palavras contendo digitos tratando-as como um único termo: <example>
-        <title>Analisador de texto customizado.</title>
-
-        <programlisting role="php">&lt;?php
-/** Here is a custome text analyser, which treats words with digits as one term */
-
-
-/** Zend_Search_Lucene_Analysis_Analyzer_Common */
-require_once 'Zend/Search/Lucene/Analysis/Analyzer/Common.php';
+$index->addDocument($doc);
+]]></programlisting>
+
+        <para>
+            A classe <classname>Zend_Search_Lucene_Analysis_Analyzer_Common</classname> foi
+            projetada para ser um antepassado de todos os analisadores definidos pelo usuário. O
+            usuário só precisa definir os métodos <methodname>reset()</methodname> e
+            <methodname>nextToken()</methodname>, que receberá a string do membro $_input e
+            retornará os "tokens" um por um (um valor <constant>NULL</constant> indica o fim do
+            fluxo).
+        </para>
+
+        <para>
+            O método <methodname>nextToken()</methodname> deve chamar o método
+            <methodname>normalize()</methodname> em cada "token". Isso te permite usar filtros de
+            "token" junto com o seu analisador.
+        </para>
+
+        <para>
+            Aqui está um exemplo de um analisador customizado, que aceita palavras contendo dígitos
+            como termos:
+
+            <example id="zend.search.lucene.extending.analysis.example-1">
+                <title>Analisador de Texto Customizado</title>
+
+                <programlisting language="php"><![CDATA[
+/**
+ * Here is a custom text analyser, which treats words with digits as
+ * one term
+ */
 
 class My_Analyzer extends Zend_Search_Lucene_Analysis_Analyzer_Common
 {
+    private $_position;
+
     /**
-     * Tokenize text to a terms
-     * Returns array of Zend_Search_Lucene_Analysis_Token objects
+     * Reset token stream
+     */
+    public function reset()
+    {
+        $this->_position = 0;
+    }
+
+    /**
+     * Tokenization stream API
+     * Get next token
+     * Returns null at the end of stream
      *
-     * @param string $data
-     * @return array
+     * @return Zend_Search_Lucene_Analysis_Token|null
      */
-    public function tokenize($data)
+    public function nextToken()
     {
-        $tokenStream = array();
+        if ($this->_input === null) {
+            return null;
+        }
 
-        $position = 0;
-        while ($position &lt; strlen($data)) {
+        while ($this->_position < strlen($this->_input)) {
             // skip white space
-            while ($position &lt; strlen($data) &amp;&amp; !ctype_alpha($data{$position}) &amp;&amp; !ctype_digit($data{$position})) {
-                $position++;
+            while ($this->_position < strlen($this->_input) &&
+                   !ctype_alnum( $this->_input[$this->_position] )) {
+                $this->_position++;
             }
 
-            $termStartPosition = $position;
+            $termStartPosition = $this->_position;
 
             // read token
-            while ($position &lt; strlen($data) &amp;&amp; (ctype_alpha($data{$position}) || ctype_digit($data{$position}))) {
-                $position++;
+            while ($this->_position < strlen($this->_input) &&
+                   ctype_alnum( $this->_input[$this->_position] )) {
+                $this->_position++;
             }
 
             // Empty token, end of stream.
-            if ($position == $termStartPosition) {
-                break;
+            if ($this->_position == $termStartPosition) {
+                return null;
             }
 
-            $token = new Zend_Search_Lucene_Analysis_Token(substr($data,
+            $token = new Zend_Search_Lucene_Analysis_Token(
+                                      substr($this->_input,
                                              $termStartPosition,
-                                             $position-$termStartPosition),
+                                             $this->_position -
+                                             $termStartPosition),
                                       $termStartPosition,
-                                      $position);
-            $tokenStream[] = $this-&gt;normalize($token);
+                                      $this->_position);
+            $token = $this->normalize($token);
+            if ($token !== null) {
+                return $token;
+            }
+            // Continue if token is skipped
         }
 
-        return $tokenStream;
+        return null;
     }
 }
 
 Zend_Search_Lucene_Analysis_Analyzer::setDefault(
     new My_Analyzer());
-
-?&gt;</programlisting>
-      </example></para>
-  </sect2>
-
-  <sect2 id="zend.search.lucene.extending.scoring">
-    <title>Algoritmos de Pontuação</title>
-
-    <para>A pontuação da consulta <code>q</code> para o documento
-    <code>d</code> é definida como segue:</para>
-
-    <para><code>score(q,d) = sum( tf(t in d) * idf(t) * getBoost(t.field in d)
-    * lengthNorm(t.field in d) ) * coord(q,d) * queryNorm(q)</code></para>
-
-    <para>tf(t in d) -
-    <code>Zend_Search_Lucene_Search_Similarity::tf($freq)</code> - um fator de
-    pontuação baseado na frequência de um termo ou frase em um
-    documento.</para>
-
-    <para>idf(t) -
-    <code>Zend_Search_Lucene_Search_SimilaritySimilarity::tf($term,
-    $reader)</code> - um fator de pontuação para um termo simples para o
-    índice especificado.</para>
-
-    <para>getBoost(t.field in d) - fator de reforço para o campo.</para>
-
-    <para>lengthNorm($term) - O valor de normalização para um campo, dado o
-    número total de termos contido nele. Este valor é armazenado junto com o
-    índice. Estes valores, juntamente com os campos de reforço, são
-    armazenados em um índice e multiplicados nas pontuações de acerto em cada
-    campo, pelo código de busca.</para>
-
-    <para>Comparações em campos longos são menos precisas, e implementações
-    deste método usualmente retornam valores pequenos quando o número de
-    "tokens" é grande, e valores gradnes quando o número de "tokens" for
-    pequeno.</para>
-
-    <para>coord(q,d) -
-    <code>Zend_Search_Lucene_Search_Similarity::coord($overlap,
-    $maxOverlap)</code> - um fator de pontuação baseado no quociente de todos
-    os termos de busca que um documento contém.</para>
-
-    <para>The presence of a large portion of the query terms indicates a
-    better match with the query, so implementations of this method usually
-    return larger values when the ratio between these parameters is large and
-    smaller values when the ratio between them is small.</para>
-
-    <para>A existência de uma grande quantidade de termos de busca indica um
-    grau maior de comparação. As implementações deste método usualmente
-    retornam valores significativos quando a razão entre estes parâmetros é
-    grande e vice versa. </para>
-
-    <para>queryNorm(q) - o valor de normalização para uma consulta dado a soma
-    dos (squared weights) de cada termo da consulta. Este valor é então
-    multiplicado pelo (weight) de cada ítem da consulta.</para>
-
-    <para>Isto não afeta a pontuação, mas a quantidade de tentativas para
-    gerar pontuações em comparações entre consultas.</para>
-
-    <para>O algoritmo de pontuação pode ser customizado pela implementação da
-    sua própria classe de similaridade. Para isso crie uma classe descendente
-    de Zend_Search_Lucene_Search_Similarity como mostrado abaixo, então use o
-    método
-    <code>Zend_Search_Lucene_Search_Similarity::setDefault($similarity);</code>
-    para defini-la como padrão.</para>
-
-    <programlisting role="php">&lt;?php
-
+]]></programlisting>
+            </example>
+        </para>
+    </sect2>
+
+    <sect2 id="zend.search.lucene.extending.filters">
+        <title>Tokens Filtering</title>
+
+        <para>
+            The <classname>Zend_Search_Lucene_Analysis_Analyzer_Common</classname> analyzer also offers a token filtering
+            mechanism.
+        </para>
+
+        <para>
+            The <classname>Zend_Search_Lucene_Analysis_TokenFilter</classname> class provides an abstract interface for such filters.
+            Your own filters should extend this class either directly or indirectly.
+        </para>
+
+        <para>
+            Any custom filter must implement the <methodname>normalize()</methodname> method which may transform input token or signal that
+            the current token should be skipped.
+        </para>
+
+        <para>
+            There are three filters already defined in the analysis subpackage:
+            <itemizedlist>
+                <listitem>
+                    <para>
+                        <classname>Zend_Search_Lucene_Analysis_TokenFilter_LowerCase</classname>
+                    </para>
+                </listitem>
+
+                <listitem>
+                    <para>
+                        <classname>Zend_Search_Lucene_Analysis_TokenFilter_ShortWords</classname>
+                    </para>
+                </listitem>
+
+                <listitem>
+                    <para>
+                        <classname>Zend_Search_Lucene_Analysis_TokenFilter_StopWords</classname>
+                    </para>
+                </listitem>
+            </itemizedlist>
+        </para>
+
+        <para>
+            The <code>LowerCase</code> filter is already used for
+            <classname>Zend_Search_Lucene_Analysis_Analyzer_Common_Text_CaseInsensitive</classname> analyzer
+            by default.
+        </para>
+
+        <para>
+            The <code>ShortWords</code> and <code>StopWords</code> filters may be used with pre-defined or custom
+            analyzers like this:
+
+            <programlisting language="php"><![CDATA[
+$stopWords = array('a', 'an', 'at', 'the', 'and', 'or', 'is', 'am');
+$stopWordsFilter =
+    new Zend_Search_Lucene_Analysis_TokenFilter_StopWords($stopWords);
+
+$analyzer =
+    new Zend_Search_Lucene_Analysis_Analyzer_Common_TextNum_CaseInsensitive();
+$analyzer->addFilter($stopWordsFilter);
+
+Zend_Search_Lucene_Analysis_Analyzer::setDefault($analyzer);
+]]></programlisting>
+
+            <programlisting language="php"><![CDATA[
+$shortWordsFilter = new Zend_Search_Lucene_Analysis_TokenFilter_ShortWords();
+
+$analyzer =
+    new Zend_Search_Lucene_Analysis_Analyzer_Common_TextNum_CaseInsensitive();
+$analyzer->addFilter($shortWordsFilter);
+
+Zend_Search_Lucene_Analysis_Analyzer::setDefault($analyzer);
+]]></programlisting>
+        </para>
+
+        <para>
+            The <classname>Zend_Search_Lucene_Analysis_TokenFilter_StopWords</classname> constructor takes an array of stop-words
+            as an input. But stop-words may be also loaded from a file:
+
+            <programlisting language="php"><![CDATA[
+$stopWordsFilter = new Zend_Search_Lucene_Analysis_TokenFilter_StopWords();
+$stopWordsFilter->loadFromFile($my_stopwords_file);
+
+$analyzer =
+   new Zend_Search_Lucene_Analysis_Analyzer_Common_TextNum_CaseInsensitive();
+$analyzer->addFilter($stopWordsFilter);
+
+Zend_Search_Lucene_Analysis_Analyzer::setDefault($analyzer);
+]]></programlisting>
+
+            This file should be a common text file with one word in each line. The '#' character marks a line as a comment.
+        </para>
+
+        <para>
+            The <classname>Zend_Search_Lucene_Analysis_TokenFilter_ShortWords</classname> constructor has one optional argument.
+            This is the word length limit, set by default to 2.
+        </para>
+    </sect2>
+
+    <sect2 id="zend.search.lucene.extending.scoring">
+        <title>Algoritmos de Pontuação</title>
+
+        <para>
+            A pontuação de um documento <literal>d</literal> para uma consulta <literal>q</literal>
+            é definida como segue:
+        </para>
+
+        <para>
+            <code>score(q,d) = sum( tf(t in d) * idf(t) * getBoost(t.field in d) * lengthNorm(t.field in d) ) *
+            coord(q,d) * queryNorm(q)</code>
+        </para>
+
+        <para>
+            tf(t in d) - <methodname>Zend_Search_Lucene_Search_Similarity::tf($freq)</methodname> - 
+            um fator de pontuação baseado na frequência de um termo ou frase em um documento.
+        </para>
+
+        <para>
+            idf(t) -
+            <methodname>Zend_Search_Lucene_Search_Similarity::idf($input, $reader)</methodname> -
+            um fator de pontuação para um termo simples com o índice especificado.
+        </para>
+
+        <para>
+            getBoost(t.field in d) - o fator de reforço para o campo.
+        </para>
+
+        <para>
+            lengthNorm($term) - O valor de normalização para um campo, dado o número total de termos
+            contido nele. Este valor é armazenado junto com o índice. Estes valores, juntamente com
+            os campos de reforço, são armazenados em um índice e multiplicados nas pontuações de
+            acerto em cada campo, pelo código de busca.
+        </para>
+
+        <para>
+            Comparações em campos longos são menos precisas, e implementações deste método
+            usualmente retornam valores pequenos quando o número de "tokens" é grande, e valores
+            grandes quando o número de "tokens" for pequeno.
+        </para>
+
+        <para>
+            coord(q,d) - <methodname>Zend_Search_Lucene_Search_Similarity::coord($overlap,
+                $maxOverlap)</methodname> - um fator de pontuação baseado no quociente de todos os
+            termos de busca que um documento contém.
+        </para>
+
+        <para>
+            A existência de uma grande quantidade de termos de busca indica um grau maior de
+            comparação. As implementações deste método usualmente retornam valores significativos
+            quando a razão entre estes parâmetros é grande e vice versa.
+        </para>
+
+        <para>
+            queryNorm(q) - o valor de normalização para uma consulta dado a soma das relevâncias ao
+            quadrado de cada termo da consulta. Este valor é então multiplicado pela relevância de
+            cada ítem da consulta.
+        </para>
+
+        <para>
+            Isto não afeta a pontuação, mas a quantidade de tentativas para gerar pontuações em
+            comparações entre consultas.
+        </para>
+
+        <para>
+            O algoritmo de pontuação pode ser customizado pela implementação da sua própria classe
+            de similaridade. Para isso crie uma classe descendente de
+            <classname>Zend_Search_Lucene_Search_Similarity</classname> como mostrado abaixo, então
+            use o método
+            <classname>Zend_Search_Lucene_Search_Similarity::setDefault($similarity);</classname>
+            para defini-la como padrão.
+        </para>
+
+        <programlisting language="php"><![CDATA[
 class MySimilarity extends Zend_Search_Lucene_Search_Similarity {
     public function lengthNorm($fieldName, $numTerms) {
         return 1.0/sqrt($numTerms);
@@ -199,39 +341,45 @@ class MySimilarity extends Zend_Search_Lucene_Search_Similarity {
 
 $mySimilarity = new MySimilarity();
 Zend_Search_Lucene_Search_Similarity::setDefault($mySimilarity);
-
-?&gt;</programlisting>
-  </sect2>
-
-  <sect2 id="zend.search.lucene.extending.storage">
-    <title>Recipientes de Armazenagem</title>
-
-    <para>A classe abstrata Zend_Search_Lucene_Storage_Directory define a
-    funcionalidade de diretório.</para>
-
-    <para>O construtor do Zend_Search_Lucene usa como entrada uma string ou um
-    objeto da classe Zend_Search_Lucene_Storage_Directory.</para>
-
-    <para>A classe Zend_Search_Lucene_Storage_Directory_Filesystem implementa
-    a funcionalidade de diretório para o sistema de arquivos.</para>
-
-    <para>If string is used as an input for the Zend_Search_Lucene
-    constructor, then the index reader (Zend_Search_Lucene object) treats it
-    as a file system path and instantiates
-    Zend_Search_Lucene_Storage_Directory_Filesystem object by
-    themselves.</para>
-
-    <para>Se uma string for usada como entrada para o construtor do
-    Zend_Search_Lucene, então o leitor do índice (um objeto
-    Zend_Search_Lucene) a tratará como um caminho para o sistema de arquivos e
-    instanciará um objeto da classe
-    Zend_Search_Lucene_Storage_Directory_Filesystem.</para>
-
-    <para>Voce pode definir a sua própria implementação de diretório
-    extendendo a classe Zend_Search_Lucene_Storage_Directory.</para>
-
-    <para>Métodos de Zend_Search_Lucene_Storage_Directory: <programlisting>&lt;?php
-
+]]></programlisting>
+    </sect2>
+
+    <sect2 id="zend.search.lucene.extending.storage">
+        <title>Recipientes de Armazenagem</title>
+
+        <para>
+            A classe abstrata <classname>Zend_Search_Lucene_Storage_Directory</classname> define a
+            funcionalidade de diretório.
+        </para>
+
+        <para>
+            O construtor do <classname>Zend_Search_Lucene</classname> usa como entrada uma string ou
+            um objeto da classe <classname>Zend_Search_Lucene_Storage_Directory</classname>.
+        </para>
+
+        <para>
+            A classe <classname>Zend_Search_Lucene_Storage_Directory_Filesystem</classname>
+            implementa a funcionalidade de diretório para o sistema de arquivos.
+        </para>
+
+        <para>
+            Se uma string for usada como entrada para o construtor do
+            <classname>Zend_Search_Lucene</classname>, então o leitor do índice (um objeto
+            <classname>Zend_Search_Lucene</classname>) a tratará como um caminho para o sistema de
+            arquivos e instanciará um objeto
+            <classname>Zend_Search_Lucene_Storage_Directory_Filesystem</classname>.
+        </para>
+
+        <para>
+            Você pode definir a sua própria implementação de diretório extendendo a classe
+            <classname>Zend_Search_Lucene_Storage_Directory</classname>.
+        </para>
+
+        <para>
+            Métodos de <classname>Zend_Search_Lucene_Storage_Directory</classname>:
+        </para>
+
+        <programlisting language="php"><![CDATA[
 abstract class Zend_Search_Lucene_Storage_Directory {
 /**
  * Closes the store.
@@ -240,7 +388,6 @@ abstract class Zend_Search_Lucene_Storage_Directory {
  */
 abstract function close();
 
-
 /**
  * Creates a new, empty file in the directory with the given $filename.
  *
@@ -249,7 +396,6 @@ abstract function close();
  */
 abstract function createFile($filename);
 
-
 /**
  * Removes an existing $filename in the directory.
  *
@@ -258,7 +404,6 @@ abstract function createFile($filename);
  */
 abstract function deleteFile($filename);
 
-
 /**
  * Returns true if a file with the given $filename exists.
  *
@@ -267,7 +412,6 @@ abstract function deleteFile($filename);
  */
 abstract function fileExists($filename);
 
-
 /**
  * Returns the length of a $filename in the directory.
  *
@@ -276,7 +420,6 @@ abstract function fileExists($filename);
  */
 abstract function fileLength($filename);
 
-
 /**
  * Returns the UNIX timestamp $filename was last modified.
  *
@@ -285,7 +428,6 @@ abstract function fileLength($filename);
  */
 abstract function fileModified($filename);
 
-
 /**
  * Renames an existing file in the directory.
  *
@@ -295,7 +437,6 @@ abstract function fileModified($filename);
  */
 abstract function renameFile($from, $to);
 
-
 /**
  * Sets the modified time of $filename to now.
  *
@@ -304,9 +445,9 @@ abstract function renameFile($from, $to);
  */
 abstract function touchFile($filename);
 
-
 /**
- * Returns a Zend_Search_Lucene_Storage_File object for a given $filename in the directory.
+ * Returns a Zend_Search_Lucene_Storage_File object for a given
+ * $filename in the directory.
  *
  * @param string $filename
  * @return Zend_Search_Lucene_Storage_File
@@ -314,24 +455,31 @@ abstract function touchFile($filename);
 abstract function getFileObject($filename);
 
 }
-
-?&gt;</programlisting></para>
-
-    <para>O método <code>getFileObject($filename)</code> da classe
-    Zend_Search_Lucene_Storage_Directory retorna um objeto
-    Zend_Search_Lucene_Storage_File.</para>
-
-    <para>A classe abstrata Zend_Search_Lucene_Storage_File implementa a
-    abstração de arquivo e as primitivas de leitura de arquivos de
-    índice.</para>
-
-    <para>Se fizer isso, você também terá que extender a classe
-    Zend_Search_Lucene_Storage_File para a sua implementação de
-    diretório.</para>
-
-    <para>Somente dois métodos da classe Zend_Search_Lucene_Storage_File devem
-    ser sobrecarregados em sua implementação: <programlisting>&lt;?php
-
+]]></programlisting>
+
+        <para>
+            O método <methodname>getFileObject($filename)</methodname> de uma instância
+            <classname>Zend_Search_Lucene_Storage_Directory</classname> retorna um objeto
+            <classname>Zend_Search_Lucene_Storage_File</classname>.
+        </para>
+
+        <para>
+            A classe abstrata <classname>Zend_Search_Lucene_Storage_File</classname> implementa a
+            abstração de arquivo e as primitivas de leitura de arquivos de índice.
+        </para>
+
+        <para>
+            Se fizer isso, você também terá que extender
+            <classname>Zend_Search_Lucene_Storage_File</classname> para a sua implementação de
+            diretório.
+        </para>
+
+        <para>
+            Somente dois métodos de <classname>Zend_Search_Lucene_Storage_File</classname> devem ser
+            substituídos em sua implementação:
+        </para>
+
+        <programlisting language="php"><![CDATA[
 class MyFile extends Zend_Search_Lucene_Storage_File {
     /**
      * Sets the file position indicator and advances the file pointer.
@@ -363,10 +511,11 @@ class MyFile extends Zend_Search_Lucene_Storage_File {
         ...
     }
 }
+]]></programlisting>
 
-?&gt;</programlisting></para>
-  </sect2>
+    </sect2>
 </sect1>
+
 <!--
 vim:se ts=4 sw=4 et:
 -->

+ 301 - 66
documentation/manual/pt-br/module_specs/Zend_Search_Lucene-IndexCreation.xml

@@ -1,92 +1,327 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- EN-Revision: 18536 -->
+<!-- Reviewed: no -->
 <sect1 id="zend.search.lucene.index-creation">
-  <title>Construindo Índices</title>
+    <title>Construindo Índices</title>
 
-  <sect2 id="zend.search.lucene.index-creation.creating">
-    <title>Criando um Novo Índice</title>
+    <sect2 id="zend.search.lucene.index-creation.creating">
+        <title>Criando um Novo Índice</title>
 
-    <para>As funcionalidades de criação e atualização de índices são
-    implementadas tanto pelo módulo Zend_Search_Lucene quanto pelo Java
-    Lucene. Você pode usar ambas as funcionalidades.</para>
+        <para>
+            As funcionalidades de criação e atualização de índices são implementadas tanto no
+            componente <classname>Zend_Search_Lucene</classname> como no projeto Java Lucene. Você
+            pode usar qualquer uma destas opções para criar índices pesquisáveis pelo
+            <classname>Zend_Search_Lucene</classname>.
+        </para>
 
-    <para>O código PHP abaixo mostra um exemplo de como indexar um arquivo
-    usando a API de indexação do Zend_Search_Lucene:</para>
+        <para>
+            O código <acronym>PHP</acronym> abaixo mostra um exemplo de como indexar um arquivo
+            usando a <acronym>API</acronym> de indexação do
+            <classname>Zend_Search_Lucene</classname>:
+        </para>
 
-    <programlisting role="php">&lt;?php
+        <programlisting language="php"><![CDATA[
+// Cria o índice
+$index = Zend_Search_Lucene::create('/data/my-index');
 
-// Setting the second argument to TRUE creates a new index
-$index = new Zend_Search_Lucene('/data/my-index', true);
+$doc = new Zend_Search_Lucene_Document();
+
+// Armazena a URL do documento para identificá-lo nos resultados da pesquisa
+$doc->addField(Zend_Search_Lucene_Field::Text('url', $docUrl));
+
+// Indexa os conteúdos do documento
+$doc->addField(Zend_Search_Lucene_Field::UnStored('contents', $docContent));
+
+// Adiciona o documento ao índice
+$index->addDocument($doc);
+]]></programlisting>
+
+        <para>
+            Documentos adicionados recentemente são imediatamente pesquisáveis no índice.
+        </para>
+    </sect2>
+
+    <sect2 id="zend.search.lucene.index-creation.updating">
+        <title>Atualizando um Índice</title>
+
+        <para>
+            O mesmo procedimento é empregado para atualizar um índice existente. A única diferença
+            é que o método open() é chamado no lugar do método create():
+        </para>
+
+        <programlisting language="php"><![CDATA[
+// Abre um índice existente
+$index = Zend_Search_Lucene::open('/data/my-index');
 
 $doc = new Zend_Search_Lucene_Document();
+// Armazena a URL do documento para identificá-lo no resultado da pesquisa
+$doc->addField(Zend_Search_Lucene_Field::Text('url', $docUrl));
+// Indexa o conteúdo do documento
+$doc->addField(Zend_Search_Lucene_Field::UnStored('contents',
+                                                  $docContent));
+
+// Adiciona o documento ao índice
+$index->addDocument($doc);
+]]></programlisting>
+    </sect2>
+
+    <sect2 id="zend.search.lucene.index-creation.document-updating">
+        <title>Atualizando os Documentos</title>
+
+        <para>
+            O formato de arquivo do índice Lucene não suporta a atualização do documento. Os
+            documentos devem ser removidos e adicionados novamente ao índice para atualizá-los de
+            forma eficaz.
+        </para>
+
+        <para>
+            O método <methodname>Zend_Search_Lucene::delete()</methodname> funciona com uma
+            identificação interna do índice do documento. Ela pode ser recuperada de uma consulta
+            pela propriedade 'id':
+        </para>
 
-// Store document URL to identify it in search result.
-$doc-&gt;addField(Zend_Search_Lucene_Field::Text('url', $docUrl));
+        <programlisting language="php"><![CDATA[
+$removePath = ...;
+$hits = $index->find('path:' . $removePath);
+foreach ($hits as $hit) {
+    $index->delete($hit->id);
+}
+]]></programlisting>
+    </sect2>
 
-// Index document content
-$doc-&gt;addField(Zend_Search_Lucene_Field::UnStored('contents', $docContent));
+    <sect2 id="zend.search.lucene.index-creation.counting">
+        <title>Recuperando o Tamanho do Índice</title>
 
-// Add document to the index.
-$index-&gt;addDocument($doc);
+        <para>
+            Existem dois métodos para recuperar o tamanho de um índice no
+            <classname>Zend_Search_Lucene</classname>.
+        </para>
 
-// Write changes to the index.
-$index-&gt;commit();
-?&gt;</programlisting>
+        <para>
+            O método <methodname>Zend_Search_Lucene::maxDoc()</methodname> retorna um número maior
+            do que o maior número possível de documentos. É na verdade o número total de documentos
+            no índice incluindo os documentos excluídos, por isso ele tem um sinônimo:
+            <methodname>Zend_Search_Lucene::count()</methodname>.
+        </para>
 
-    <para>Documentos adicionados recentemente devem ser pesquisados no índice
-    somente após um "commit" ter sido executado.</para>
+        <para>
+            O método <methodname>Zend_Search_Lucene::numDocs()</methodname> retorna o número total
+            de documentos que não foram excluídos.
+        </para>
 
-    <para>O método <code>Zend_Search_Lucene::commit()</code> é chamado
-    automaticamente ao final da execução do script e antes de qualquer
-    operação de busca.</para>
+        <programlisting language="php"><![CDATA[
+$indexSize = $index->count();
+$documents = $index->numDocs();
+]]></programlisting>
 
-    <para>Cada chamada a método commit() gera um novo segmento de índice. Ele
-    deve ser usado raramente, se possível. Observe também que executar
-    "commit" em uma grande quantidade de documentos, em um único passo,
-    consome mais memória.</para>
+        <para>
+            O método <methodname>Zend_Search_Lucene::isDeleted($id)</methodname> pode ser usado para
+            verificar se um documento foi excluído.
+        </para>
 
-    <para>O gerenciamento e a otimização de segmentos de forma automatica é um
-    assunto para ser tratado em futuros aprimoramentos do módulo
-    Zend_Search_Lucene.</para>
-  </sect2>
+        <programlisting language="php"><![CDATA[
+for ($count = 0; $count < $index->maxDoc(); $count++) {
+    if ($index->isDeleted($count)) {
+        echo "O documento #$id foi excluído.\n";
+    }
+}
+]]></programlisting>
 
-  <sect2 id="zend.search.lucene.index-creation.updating">
-    <title>Atualizando um Índice</title>
+        <para>
+            A otimização do índice remove os documentos excluídos e comprime as IDs dos documentos
+            em um intervalo menor. Assim, uma id interna de um documento pode ser alterada durante
+            a otimização do índice.
+        </para>
+    </sect2>
 
-    <para>O mesmo procedimento é empregado para atualizar um índice existente.
-    A única diferença é que o índice deverá ser aberto sem o segundo
-    parâmetro:</para>
+    <sect2 id="zend.search.lucene.index-creation.optimization">
+        <title>Otimização do Índice</title>
 
-    <programlisting role="php">&lt;?php
+        <para>
+            Um índice Lucene é composto por vários segmentos. Cada segmento é um conjunto de dados
+            completamente independente.
+        </para>
 
+        <para>
+            Os arquivos de segmento de índice Lucene não podem ser atualizados devido ao seu
+            projeto. A atualização de um segmento necessita de uma reorganização completa do
+            segmento. Veja os formatos de arquivos de índice Lucene para mais detalhes
+            (<ulink
+                url="http://lucene.apache.org/java/2_3_0/fileformats.html">http://lucene.apache.org/java/2_3_0/fileformats.html</ulink>)
+            <footnote>
+                <para>
+                    O formato de arquivo de índice Lucene atualmente suportado é a versão 2.3
+                    (desde Zend Framework 1.6).
+                </para>
+            </footnote>.
+            Novos documentos são adicionados ao índice através da criação de um novo segmento.
+        </para>
+
+        <para>
+            Increasing number of segments reduces quality of the index, but index optimization restores it.
+            Optimization essentially merges several segments into a new one. This process also doesn't update segments.
+            It generates one new large segment and updates segment list ('segments' file).
+        </para>
+
+        <para>
+            Full index optimization can be trigger by calling the <methodname>Zend_Search_Lucene::optimize()</methodname> method. It merges all
+            index segments into one new segment:
+        </para>
+
+        <programlisting language="php"><![CDATA[
 // Open existing index
-$index = new Zend_Search_Lucene('/data/my-index');
+$index = Zend_Search_Lucene::open('/data/my-index');
 
-$doc = new Zend_Search_Lucene_Document();
-// Store document URL to identify it in search result.
-$doc-&gt;addField(Zend_Search_Lucene_Field::Text('url', $docUrl));
-// Index document content
-$doc-&gt;addField(Zend_Search_Lucene_Field::UnStored('contents', $docContent));
-
-// Add document to the index.
-$index-&gt;addDocument($doc);
-
-// Write changes to the index.
-$index-&gt;commit();
-?&gt;</programlisting>
-
-    <para>Cada chamada a commit() (explícita ou implícita) gera um novo
-    segmento de índice.</para>
-
-    <para>Zend_Search_Lucene não gerencia segmentos automaticamente. Então é
-    tarefa do programador observar o tamanho dos segmentos. De um lado,
-    segmentos grandes são mais otimizados, mas por outro, eles consomem mais
-    memória durante sua criação.</para>
-
-    <para>Lucene Java e Luke (Lucene Index Toolbox - <ulink
-    url="http://www.getopt.org/luke/">http://www.getopt.org/luke/</ulink>)
-    podem ser usados para otimizar índices juntamente com esta versão do
-    Zend_Search_Lucene.</para>
-  </sect2>
+// Optimize index.
+$index->optimize();
+]]></programlisting>
+
+        <para>
+            Automatic index optimization is performed to keep indexes in a consistent state.
+        </para>
+
+        <para>
+            Automatic optimization is an iterative process managed by several index options. It merges very small segments
+            into larger ones, then merges these larger segments into even larger segments and so on.
+        </para>
+
+        <sect3 id="zend.search.lucene.index-creation.optimization.maxbuffereddocs">
+            <title>MaxBufferedDocs auto-optimization option</title>
+
+            <para>
+                <emphasis>MaxBufferedDocs</emphasis> is a minimal number of documents required before
+                the buffered in-memory documents are written into a new segment.
+            </para>
+
+            <para>
+                <emphasis>MaxBufferedDocs</emphasis> can be retrieved or set by <code>$index->getMaxBufferedDocs()</code> or
+                <code>$index->setMaxBufferedDocs($maxBufferedDocs)</code> calls.
+            </para>
+
+            <para>
+                Default value is 10.
+            </para>
+        </sect3>
+
+        <sect3 id="zend.search.lucene.index-creation.optimization.maxmergedocs">
+            <title>MaxMergeDocs auto-optimization option</title>
+
+            <para>
+                <emphasis>MaxMergeDocs</emphasis> is a largest number of documents ever merged by addDocument().
+                Small values (e.g., less than 10.000) are best for interactive indexing, as this limits the length
+                of pauses while indexing to a few seconds. Larger values are best for batched indexing and speedier
+                searches.
+            </para>
+
+            <para>
+                <emphasis>MaxMergeDocs</emphasis> can be retrieved or set by <code>$index->getMaxMergeDocs()</code> or
+                <code>$index->setMaxMergeDocs($maxMergeDocs)</code> calls.
+            </para>
+
+            <para>
+                Default value is PHP_INT_MAX.
+            </para>
+        </sect3>
+
+        <sect3 id="zend.search.lucene.index-creation.optimization.mergefactor">
+            <title>MergeFactor auto-optimization option</title>
+
+            <para>
+                <emphasis>MergeFactor</emphasis> determines how often segment indices are merged by addDocument().
+                With smaller values, less <acronym>RAM</acronym> is used while indexing, and searches on unoptimized indices are faster,
+                but indexing speed is slower. With larger values, more <acronym>RAM</acronym> is used during indexing, and while searches
+                on unoptimized indices are slower, indexing is faster. Thus larger values (&gt; 10) are best for batch
+                index creation, and smaller values (&lt; 10) for indices that are interactively maintained.
+            </para>
+
+            <para>
+                <emphasis>MergeFactor</emphasis> is a good estimation for average number of segments merged by one auto-optimization pass.
+                Too large values produce large number of segments while they are not merged into new one. It may be a cause of
+                "failed to open stream: Too many open files" error message. This limitation is system dependent.
+            </para>
+
+            <para>
+                <emphasis>MergeFactor</emphasis> can be retrieved or set by <code>$index->getMergeFactor()</code> or
+                <code>$index->setMergeFactor($mergeFactor)</code> calls.
+            </para>
+
+            <para>
+                Default value is 10.
+            </para>
+
+            <para>
+                Lucene Java and Luke (Lucene Index Toolbox - <ulink url="http://www.getopt.org/luke/">http://www.getopt.org/luke/</ulink>)
+                can also be used to optimize an index. Latest Luke release (v0.8) is based on Lucene v2.3 and compatible with
+                current implementation of <classname>Zend_Search_Lucene</classname> component (Zend Framework 1.6). Earlier versions of <classname>Zend_Search_Lucene</classname> implementations
+                need another versions of Java Lucene tools to be compatible:
+                <itemizedlist>
+                    <listitem>
+                        <para>Zend Framework 1.5 - Java Lucene 2.1 (Luke tool v0.7.1 - <ulink url="http://www.getopt.org/luke/luke-0.7.1/"/>)</para>
+                    </listitem>
+
+                    <listitem>
+                        <para>Zend Framework 1.0 - Java Lucene 1.4 - 2.1 (Luke tool v0.6 - <ulink url="http://www.getopt.org/luke/luke-0.6/"/>)</para>
+                    </listitem>
+                </itemizedlist>
+            </para>
+        </sect3>
+    </sect2>
+
+    <sect2 id="zend.search.lucene.index-creation.permissions">
+        <title>Permissions</title>
+
+        <para>
+            By default, index files are available for reading and writing by everyone.
+        </para>
+
+        <para>
+            It's possible to override this with the <methodname>Zend_Search_Lucene_Storage_Directory_Filesystem::setDefaultFilePermissions()</methodname> method:
+        </para>
+
+        <programlisting language="php"><![CDATA[
+// Get current default file permissions
+$currentPermissions =
+    Zend_Search_Lucene_Storage_Directory_Filesystem::getDefaultFilePermissions();
+
+// Give read-writing permissions only for current user and group
+Zend_Search_Lucene_Storage_Directory_Filesystem::setDefaultFilePermissions(0660);
+]]></programlisting>
+    </sect2>
+
+    <sect2 id="zend.search.lucene.index-creation.limitations">
+        <title>Limitations</title>
+
+        <sect3 id="zend.search.lucene.index-creation.limitations.index-size">
+            <title>Index size</title>
+
+            <para>
+                Index size is limited by 2GB for 32-bit platforms.
+            </para>
+
+            <para>
+                Use 64-bit platforms for larger indices.
+            </para>
+        </sect3>
+
+        <sect3 id="zend.search.lucene.index-creation.limitations.filesystems">
+            <title>Supported Filesystems</title>
+
+            <para>
+                <classname>Zend_Search_Lucene</classname> uses <methodname>flock()</methodname> to provide concurrent searching, index updating and optimization.
+            </para>
+
+            <para>
+                According to the <acronym>PHP</acronym> <ulink url="http://www.php.net/manual/en/function.flock.php">documentation</ulink>,
+                "<methodname>flock()</methodname> will not work on NFS and many other networked file systems".
+            </para>
+
+            <para>
+                Do not use networked file systems with <classname>Zend_Search_Lucene</classname>.
+            </para>
+        </sect3>
+    </sect2>
 </sect1>
+
 <!--
 vim:se ts=4 sw=4 et:
 -->