有时候用户更改帖子的内容,实际数据库中的内容字段会更新。
如何更新索引文件的相同字段?
当用户删除帖子时,如何删除索引文件中的帖子?
答案 0 :(得分:3)
我在Symfony中使用了lucene搜索,以下是我如何使用它:
// Called when an object is saved
public function save(Doctrine_Connection $conn = null) {
$conn = $conn ? $conn : $this->getTable()->getConnection();
$conn->beginTransaction();
try {
$ret = parent::save($conn);
$this->updateLuceneIndex();
$conn->commit();
return $ret;
} catch (Exception $e) {
$conn->rollBack();
throw $e;
}
}
public function updateLuceneIndex() {
$index = $this->getTable()->getLuceneIndex();
// remove existing entries
foreach ($index->find('pk:' . $this->getId()) as $hit) {
$index->delete($hit->id);
}
$doc = new Zend_Search_Lucene_Document();
// store job primary key to identify it in the search results
$doc->addField(Zend_Search_Lucene_Field::UnIndexed('pk', $this->getId()));
// index job fields
$doc->addField(Zend_Search_Lucene_Field::unStored('title', Utils::stripAccent($this->getTitle()), 'utf-8'));
$doc->addField(Zend_Search_Lucene_Field::unStored('summary', Utils::stripAccent($this->getSummary()), 'utf-8'));
// add job to the index
$index->addDocument($doc);
$index->commit();
}
// Called when an object is deleted
public function delete(Doctrine_Connection $conn = null) {
$index = $this->getTable()->getLuceneIndex();
foreach ($index->find('pk:' . $this->getId()) as $hit) {
$index->delete($hit->id);
}
return parent::delete($conn);
}
以下是我获取索引的方法:
public static function getInstance() {
return Doctrine_Core::getTable('Work');
}
static public function getLuceneIndexFile() {
return sfConfig::get('sf_data_dir') . '/indexes/work.' . sfConfig::get('sf_environment') . '.index';
}
static public function getLuceneIndex() {
ProjectConfiguration::registerZend();
if (file_exists($index = self::getLuceneIndexFile())) {
return Zend_Search_Lucene::open($index);
} else {
return Zend_Search_Lucene::create($index);
}
}
希望它会对你有所帮助;)