2012-02-15 15 views
1

私は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()と等しくないため、削除されます。しかし問題は、文書を削除した後、まだそれを検索することができ、そのフィールドの値を表示することができるということです。

私はインデックスを最適化した後で問題はまだ生きていることを確認しました。私は完全にドキュメントを削除するか、インデックスから削除されていないドキュメントを検索する必要があります。

答えて

0

検索結果をループして、文書が削除されているかどうかを確認します。表示されている場合は、検索結果から削除します。

ドキュメントが削除されたかどうかを確認するためにZend_Search_Lucene :: isDeleted($ id)メソッドを使用することができます。 Building Indexes: Updating Documents

経由

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

関連する問題