0
有時候用戶更改他們的帖子的內容,實際數據庫中的內容字段會得到更新。php lucene如何更新和刪除索引文件中的行
我怎樣才能獲得更新的索引文件相同的字段呢?
當用戶刪除一篇文章時,我該如何在索引文件中刪除該文章?
有時候用戶更改他們的帖子的內容,實際數據庫中的內容字段會得到更新。php lucene如何更新和刪除索引文件中的行
我怎樣才能獲得更新的索引文件相同的字段呢?
當用戶刪除一篇文章時,我該如何在索引文件中刪除該文章?
我用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);
}
}
希望它會幫助你;)
我對這段代碼有一個小的查詢。你如何在一個未編制索引的字段中使用find()? – CodePorter