Índice
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:
Pesquisa agrupada por pontuação (ranked) - os resultados mais prováveis são retornados primeiro
Consultas poderosas de diversos tipos: frase, curingas, aproximação, faixas e muito mais[5]
Busca por campo específico (ex: título, autor, descrição)
Zend_Search_Lucene derivou do projeto Apache Lucene. Para mais informações, visite http://lucene.apache.org/java/docs/.
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.
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.
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.
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.
A classe Zend_Search_Lucene_Field
provê alguns métodos
estáticos para criação de campos com diferentes características:
<?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->addField(Zend_Search_Lucene_Field::Keyword('doctype', 'autogenerated')); // Field is not tokenized nor indexed, but is stored in the index. $doc->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->addField(Zend_Search_Lucene_Field::Binary('icon', $iconData)); // Field is tokenized and indexed, and is stored in the index. $doc->addField(Zend_Search_Lucene_Field::Text('annotation', 'Document annotation text')); // Field is tokenized and indexed, but that is not stored in the index. $doc->addField(Zend_Search_Lucene_Field::UnStored('contents', 'My document content')); ?>
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.
Campos do tipo Keyword
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.
Campos do tipo UnIndexed
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.
Campos do tipo Binary
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.
Campos do tipo Text
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.
Campos do tipo UnStored
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.