27.8. 与 Java Lucene 的互操作性

27.8.1. 文件格式

Zend_Search_Lucene 的索引文件格式和 1.4 或更高版本的 Lucene 二进制兼容。

关于文件格式的更详细的描述在这里: http://lucene.apache.org/java/docs/fileformats.html

27.8.2. 索引目录

在创建了索引之后,索引目录中将包含下列文件:

  • segments 文件是一个索引分段的清单。

  • *.cfs 文件包含索引分段。请注意!优化了的索引总是只有一个分段。

  • deletable 文件是一个不再被索引使用但是无法删除的文件清单。

27.8.3. Java 源代码

下面的 Java 程序提供了一个如何使用 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. 使用 LuceneIndexCreation.jar

为了更快的开始使用 Zend_Search_Lucene,人们创建了一个基于 Java 的 JAR 文件用以通过命令行生成索引。要了解 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 那么文档的内容也被保存在索引中,可以通过 pathmodified 字段直接获取。

否则,只有 pathmodified 字段被保存,而 contents 字段仅进行索引。这种情况下文档内容只能通过其路径字段从原始文件中获取。

请小心,使用 -s 选项会让索引的大小扩大近五倍。