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 увеличивает объем индекса примерно в пять раз.