创建和更新Zend_Search_Lucene的索引(Creating and updating Z

2019-08-16 23:00发布

我使用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)文件。 能否请您解释一下这些细分文件?

Answer 1:

是的,你可以检查文档是否已经在索引中,有一看这个手册 。 然后,您可以通过首页 - $>删除($ ID);,其中$ id是termDocs方法的返回值从索引中删除这个特定的文档。 之后,你可以简单地添加了文件的新版本。

有关Lucene的创建多个索引文件:每次修改现有的索引时,Lucene的不真的​​改变现有的文件,但增加了部分索引,每改变你做。 这是表现极其糟糕,但有解决这个简单的方法。 之后每次改变您对指数做:$首页 - >优化(); - 这将所有的部分文件追加到真正的索引,提高searchtimes显着。



文章来源: Creating and updating Zend_Search_Lucene indexes