# Interoperando com Java Lucene

## 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: .

## 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.

## 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);

## 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: .

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.