22.8. Взаимодействие с Java Lucene
Пред. | Глава 22. Zend_Search | След.

## 22.8. Взаимодействие с Java Lucene

### 22.8.1. Форматы файлов

Форматы файлов индекса Zend_Search_Lucene являются совместимыми с Lucene версии 1.4 и выше.

Подробное описание этого формата можно прочитать здесь: http://lucene.apache.org/java/docs/fileformats.html.

### 22.8.2. Директория для индекса

После создания индекса директория для индекса будет содержать несколько файлов:

- файл `segments` является списком сегментов индекса.

- файлы `*.cfs` содержат сегменты индекса. Внимание! Оптимизированный индекс всегда имеет только один сегмент.

- файл `deletable` является списком файлов, которые больше не используются индексом, но которые нельзя было удалить.

### 22.8.3. Исходный код Java

Приведенный ниже листинг программы на Java представляет собой пример того, как индексировать файл, используя Java Lucene:

    /**
    * Создание индекса:
    */
    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);

### 22.8.4. Использование LuceneIndexCreation.jar

Для того, чтобы можно было сразу начать работать с Zend_Search_Lucene, файл JAR (JAVA) уже создан с тем, чтобы можно было генерировать индекс из командной строки. За более подробной информацией о файлах JAR, см. http://java.sun.com/docs/books/tutorial/jar/basics/index.html.

LuceneIndexCreation.jar принимает текстовые файлы и создает из них индекс. Использование:

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

Эта команда принимает директорию `<document_dir>`, включая все ее вложенные директории, и создает индекс Lucene. Индекс является набором файлов, которые будут сохранены в отдельной директории, которая задается через `<index_dir>`.

Для каждого индексируемого документа LuceneIndexCreation создает объект документа с тремя полями: поле contents, содержащее тело документа, поле modified, содержащее время изменения файла, и полный путь с именем файла в поле path.

Если указана опция `-c`, то индекс становится чувствительным к регистру. Иначе перед добавлением в индекс все элементы приводятся к нижнему регистру.

Если указана опция `-s`, то содержимое документа тоже сохраняется в индексе и сожет быть получено с помощью полей `path` и `modified`.

Иначе сохраняются только поля `path` и `modified`, поле `contents` только индексируется. В этом случае содержимое документа должно быть получено из источника через его путь.

Будьте осторожны — применение опции `-s` увеличивает объем индекса примерно в пять раз.

Пред. | Уровень выше | След.
22.7. Расширяемость | Начало | Глава 23. Zend_Server