<sect1 id="zend.search.lucene.overview">
  <title>Visão Geral</title>

  <sect2 id="zend.search.lucene.introduction">
    <title>Introdução</title>

    <para>Zend_Search_Lucene é um mecanismo para pesquisa de texto, de
    propósito geral, escrito totalmente em PHP 5. Por armazenar os
    índices no sistema de arquivos e não fazer uso de servidor de banco de
    dados, ele pode efetuar pesquisas em qualquer website rodando php.
    O Zend_Search_Lucene possui os seguintes recursos: <itemizedlist>
        <listitem>
          <para>Pesquisa agrupada por pontuação (ranked) - os resultados mais
          prováveis são retornados primeiro</para>
        </listitem>

        <listitem>
          <para>Consultas poderosas de diversos tipos: frase, curingas,
          aproximação, faixas e muito mais<footnote>
              <para>Por enquanto, apenas as consultas por termo e termos
              múltiplos são suportadas.</para>
            </footnote></para>
        </listitem>

        <listitem>
          <para>Busca por campo específico (ex: título, autor,
          descrição)</para>
        </listitem>
      </itemizedlist> Zend_Search_Lucene derivou do projeto Apache Lucene.
    Para mais informações, visite <ulink
    url="http://lucene.apache.org/java/docs/"></ulink>.</para>
  </sect2>

  <sect2 id="zend.search.lucene.index-creation.documents-and-fields">
    <title>Objetos Documento e Campo</title>

    <para>Zend_Search_Lucene trabalha sobre os documentos subdividindo-os em
    pequenas operações (atômicas) de indexação. Um documento é dividido em
    campos identificados cujo conteúdo é pesquisado.</para>

    <para>Um documento é representado por um objeto da classe
    Zend_Search_Lucene_Document, que por sua vez contém objetos da classe
    Zend_Search_Lucene_Field que representam os campos.</para>

    <para>O que é importante ressaltar é que qualquer tipo de informação pode
    ser adicionada a um índice. Informações específicas de aplicações ou
    metadados podem ser armazenados em campos de um documento, e
    posteriormente recuperados juntamente com o documento durante uma
    pesquisa.</para>

    <para>Controlar o indexador é responsabilidade de sua aplicação. Este
    recurso garante que os dados possam ser indexados a partir de qualquer
    fonte que seja acessível à sua aplicação. Por exemplo, um sistema de
    arquivos, um banco de dados, um formulário HTML, etc.</para>

    <para><code>A classe Zend_Search_Lucene_Field</code> provê alguns métodos
    estáticos para criação de campos com diferentes características:</para>

    <programlisting role="php">&lt;?php
$doc = new Zend_Search_Lucene_Document();

// Field is not tokenized, but is indexed and stored within the index.
// Stored fields can be retrived from the index.
$doc-&gt;addField(Zend_Search_Lucene_Field::Keyword('doctype',
                                                 'autogenerated'));

// Field is not tokenized nor indexed, but is stored in the index.
$doc-&gt;addField(Zend_Search_Lucene_Field::UnIndexed('created',
                                                   time()));

// Binary String valued Field that is not tokenized nor indexed,
// but is stored in the index.
$doc-&gt;addField(Zend_Search_Lucene_Field::Binary('icon',
                                                $iconData));

// Field is tokenized and indexed, and is stored in the index.
$doc-&gt;addField(Zend_Search_Lucene_Field::Text('annotation',
                                              'Document annotation text'));

// Field is tokenized and indexed, but that is not stored in the index.
$doc-&gt;addField(Zend_Search_Lucene_Field::UnStored('contents',
                                                  'My document content'));

?&gt;</programlisting>

    <para>Você pode dar nome aos campos de acordo com a sua preferência. Um
    campo chamado "contents" pode ser usado para a pesquisa "default". É uma
    boa prática colocar os dados principais do documento em um campo com este
    nome.</para>
  </sect2>

  <sect2 id="zend.search.lucene.index-creation.understanding-field-types">
    <title>Entendendo os tipos de campos</title>

    <itemizedlist>
      <listitem>
        <para>Campos do tipo <code>Keyword</code> são armazenados e indexados
        ***fields are stored and indexed***, meaning they can be searched as
        well as displayed them back in search results. They are not split up
        into seperate words by tokenization. Enumerated database fields
        usually translate well to Keyword fields in Zend_Search_Lucene.</para>
      </listitem>

      <listitem>
        <para>Campos do tipo <code>UnIndexed</code> não são pesquisáveis, mas
        são retornados junto com os resultados das pesquisas. Database
        timestamps, chaves primárias, caminhos do sistema de arquivos, e
        outros identificadores externos são bons candidatos para campos
        UnIndexed.</para>
      </listitem>

      <listitem>
        <para>Campos do tipo <code>Binary</code> não são avaliados nem
        indexados, mas são armazenados para serem retornados em resultados de
        pesquisas. Eles podem ser usados para armazenar qulaquer tipo de dado
        que possa ser codificados em uma string binária, por exemplo, um
        ícone.</para>
      </listitem>

      <listitem>
        <para>Campos do tipo <code>Text</code> são armazenados, indexados e
        avaliados. Campos texto são apropriados para conter informações que
        devam ser pesquisadas, bem como retornadas por uma pesquisa, tais como
        descrições e títulos.</para>
      </listitem>

      <listitem>
        <para>Campos do tipo <code>UnStored</code> são avaliados e indexados,
        mas não são armazenados no índice. Grandes quantidades de texto são
        melhor indexadas utilizando este tipo de campo. Dados armazenados
        criam um extenso índice no disco, então se você necessitar pesquisar
        sem exibir estes dados, utilize um campo UnStored. Campos UnStored são
        úteis quando utilizamos um índice Zend_Search_Lucene em combinação com
        um banco de dados relacional. Você pode indexar campos contendo dados
        volumosos usando campos UnStored para pesquisa, e recuperá-los a
        partir de um banco de dados relacional usando campos separados como
        identificadores.</para>

        <table>
          <title>Campos Zend_Search_Lucene_Field </title>

          <tgroup cols="5">
            <thead>
              <row>
                <entry>Tipo de Campo</entry>

                <entry>Armazenado</entry>

                <entry>Indexado</entry>

                <entry>Tokenizado</entry>

                <entry>Binário</entry>
              </row>
            </thead>

            <tbody>
              <row>
                <entry>Keyword</entry>

                <entry>Sim</entry>

                <entry>Sim</entry>

                <entry>Não</entry>

                <entry>Não</entry>
              </row>

              <row>
                <entry>UnIndexed</entry>

                <entry>Sim</entry>

                <entry>Não</entry>

                <entry>Não</entry>

                <entry>Não</entry>
              </row>

              <row>
                <entry>Binary</entry>

                <entry>Sim</entry>

                <entry>Não</entry>

                <entry>Não</entry>

                <entry>Sim</entry>
              </row>

              <row>
                <entry>Text</entry>

                <entry>Sim</entry>

                <entry>Sim</entry>

                <entry>Sim</entry>

                <entry>Não</entry>
              </row>

              <row>
                <entry>UnStored</entry>

                <entry>Não</entry>

                <entry>Sim</entry>

                <entry>Sim</entry>

                <entry>Não</entry>
              </row>
            </tbody>
          </tgroup>
        </table>
      </listitem>
    </itemizedlist>
  </sect2>
</sect1>
<!--
vim:se ts=4 sw=4 et:
-->
