使用zend lucene仅搜索未删除的文档

时间:2012-02-15 09:08:02

标签: search zend-lucene

我对zend lucene并不陌生,但我在使用它时遇到了麻烦。 我使用以下代码按数字搜索文档:

$term = new Zend_Search_Lucene_Index_Term($id, $idFieldName);
$docIds  = $index->termDocs($term);
foreach ($docIds as $id) {
    $doc = $index->getDocument($id);
    echo $doc->artist_name;
}
$index->commit();

并使用以下代码按号码删除文档:

$term = new Zend_Search_Lucene_Index_Term($id, $idFieldName);
$docIds  = $index->termDocs($term);
foreach ($docIds as $id) {

    $doc = $index->getDocument($id);
    $index->delete($doc->lyric_id);

}
$index->commit(); 

删除文档时,$index->numDocs()显示文档已删除,因为返回的值不等于$index->count()的返回值。但问题是,删除文件后,我可以搜索它,我可以显示其字段的值。

我在优化索引后检查了这个问题,但问题仍然存在。我需要完全删除文档或搜索未从索引中删除的文档。

1 个答案:

答案 0 :(得分:0)

循环搜索结果并检查文档是否已删除。如果是,请将其从搜索结果中删除。

  

Zend_Search_Lucene :: isDeleted($ id)方法可用于检查是否   文件已删除。

for ($count = 0; $count < $index->maxDoc(); $count++) {
if ($index->isDeleted($count)) {
    echo "Document #$id is deleted.\n";
} }

通过Building Indexes: Updating Documents