以下部分的代码是索引脚本的最后一部分。其中的大部分代码都是通用 PHP 脚本,枚举了目录中的所有文件,并按顺序逐一处理。确定了要索引的文件后,将会创建 FileDocument.需要使用文件的完全限定路径建立此对象,然后将其添加到 IndexWriter.
/**
* Processes a file by adding it to the indexer.
*/
function index_file($writer, $path) {
echo "Indexing file [".$path."]</br>";
try {
// A few of the files we indexed in the examples have non
// UTF-8 characters so we just skip indexing those files!
$file = new Java("java.io.File", $path, FALSE);
$file_document = new JavaClass("org.apache.lucene.demo.FileDocument");
$document = $file_document->Document($file);
$writer->addDocument($document);
} catch (JavaException $exception) {
echo "Invalid characters in file!\n";
}
}
function get_microtime(){
list($part_one,$part_two) = explode(' ',microtime());
return ((float) $part_one + (float) $part_two);
}
/**
* Indexes all matching files (by extension) in the directory tree.
*/
function recursive_index_directory($writer, $path, $extension) {
echo "Indexing directory [".$path."]</br>";
// Remove any trailing slash first
if (substr($path, -1) == '/') {
$path = substr($path, 0, -1);
}
// Make sure the directory is valid
if (is_dir($path) == TRUE) {
if (is_readable($path) == TRUE) {
$handle = opendir($path);
// Scan through the directory contents
$extension_length = strlen($extension);
while (FALSE !== ($item = readdir($handle))) {
if ($item != '.') {
if ($item != '..') {
$index_path = ($path.'/'.$item);
if (is_dir($index_path) == TRUE) {
recursive_index_directory(
$writer, $index_path, $extension);
} else {
$position = strpos(strtolower($index_path), $extension);
// Very rough and ready way to check for trailing extension!
if ($position == (strlen($index_path)-$extension_length)) {
index_file($writer, $index_path, $extension);
}
}
}
}
}
closedir($handle);
}
}
return TRUE;
}
12、将 Web 浏览器指向脚本,并填写表单变量,如图 9 中所示。
图 9. 建立目录索引时的 Web 浏览器输出
13、单击 Index!,脚本将对所选文件进行索引。在上面的示例中,脚本指向一段 C 源代码,对五个源文件进行了索引。如果刷新 Eclipse 项目,会发现一个名为 Index 的新目录。此目录包含 Lucene 搜索引擎产生的搜索索引文件,如图 10 中所示。
图 10. WebSphere sMash 应用程序的目录结构