我使用Zend_Search_Lucene中创建项目索引,让他们在我的网站上搜索。 每当管理员更新/创建/删除管理方面的文章,重建索引:
$config = Zend_Registry::get("config");
$cache = $config->lucene->cache;
$path = $cache . "/articles";
try
{
$index = Zend_Search_Lucene::open($path);
}
catch (Zend_Search_Lucene_Exception $e)
{
$index = Zend_Search_Lucene::create($path);
}
$model = new Default_Model_Articles();
$select = $model->select();
$articles = $model->fetchAll($select);
foreach ($articles as $article)
{
$doc = new Zend_Search_Lucene_Document();
$doc->addField(Zend_Search_Lucene_Field::Text("title", $article->title));
$index->addDocument($doc);
}
$index->commit();
我的问题是这样的。 因为我重新索引文章和处理删除文章,以及,为什么我不只是用“创造”每一次(而不是“开放”和更新)? 用上面的方法,我认为文章将与addDocument每一次(这样就不会有重复)加入。 我将如何防止? 有没有一种方法来检查,如果文档中的索引已经存在?
另外,我不认为我完全理解索引是如何工作的,当你“打开”并进行更新。 这似乎创造新的#.cfs(所以我有_0.cfs,_1.cfs,_2.cfs)每一次文件的索引文件夹,但是当我使用“创造”,它覆盖的是一个新的#.cfs文件与递增#(因此,例如只需_2.cfs)文件。 能否请您解释一下这些细分文件?