27.8. Interoperando com Java Lucene

27.8.1. Formatos de arquivo

Arquivos Zend_Search_Lucene são arquivos de índice binários compatíveis com a versão 1.4 ou superior do Lucene.

Uma descrição detalhada deste formato está disponível aqui: http://lucene.apache.org/java/docs/fileformats.html.

27.8.2. Diretório índice

Após a criação do índice, o diretório índice conterá os seguintes arquivos:

  • O arquivo segments contém uma lista de segmentos de índice.

  • Os arquivos *.cfs contém segmentos de índice. Nota! Um índice otimizado terá apenas um único segmento.

  • O arquivo deletable contém uma lista de arquivos que não são mais utilizados pelo índice, mas que não puderam ser removidos.

27.8.3. Código fonte Java

A listagem do programa Java abaixo oferece um exemplo de como indexar um arquivo usando Java Lucene:

/**
* Index creation:
*/
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.document.*;

import java.io.*

...

IndexWriter indexWriter = new IndexWriter("/data/my_index", 
                                          new SimpleAnalyzer(), true);

...

String filename = "/path/to/file-to-index.txt"
File f = new File(filename);

Document doc = new Document();
doc.add(Field.Text("path", filename));
doc.add(Field.Keyword("modified",DateField.timeToString(f.lastModified())));
doc.add(Field.Text("author", "unknown"));
FileInputStream is = new FileInputStream(f);
Reader reader = new BufferedReader(new InputStreamReader(is));
doc.add(Field.Text("contents", reader));

indexWriter.addDocument(doc);
        

27.8.4. Usando LuceneIndexCreation.jar

Para acelerar o aprendizado do Zend_Search_Lucene, rode o arquivo JAR (Java) abaixo, conforme o exemplo, para gerar um índice a partir da linha de comando. Para maiores informações sobre arquivos JAR visite: http://java.sun.com/docs/books/tutorial/jar/basics/index.html.

O programa LuceneIndexCreation.jar processa arquivos de texto, gerando índices a partir deles . Utilização:

    java -jar LuceneIndexCreation.jar [-c] [-s] <document_dir> <index_dir>
    -c   - force index to be case sensitive
    -s   - store content in the index
    

Este comando processa o diretório <document_dir>, incluíndo todos os seus subdiretórios, produzindo um índice Lucene. O índice é um conjunto de arquivos que serão armazenados em um diretório reservado especificado por <index_dir>.

Para cada documento a ser indexado, LuceneIndexCreation cria um objeto documento contendo três campos: um campo contents que armazena o corpo do documento, um campo modified indicando a hora de modificação do arquivo, e um campo path contendo o nome e caminho completo para o arquivo.

O parâmetro -c, quando especificado, força o índice a ser sensível à caixa. Se omitido, todos os termos serão convertidos para caractéres minúsculos antes de serem adicionados ao índice.

O parâmetro -s, determina que o campo contents seja gravado no índice para ser retornado junto com os campos path e modified.

Se omitido, contents será indexado e path e modified serão armazenados. Neste caso o conteúdo do documento deverá ser recuperado a partir de uma fonte original indicada pelo campo path.

Seja criterioso ao usar a opção -s, pois ela aumenta o tamanho do índice em cerca de cinco vezes aproximadamente.