Lucene搜索停止使用symfony

时间:2011-12-09 07:40:34

标签: search symfony1 lucene doctrine zend-lucene

解决

看起来在你很累的时候工作与在你睡个好觉之后的工作不一样。问题在于prod.dev.index中的文件。他们失踪了。我重新创建它们并且有效。


我正在使用symfony 1.4 with doctrine和Zend Lucene Search集成。当我第一次按照Jobeet教程安装它时,它正在起作用。我通过svn将项目上传到另一台服务器,在那里根本不起作用。现在它甚至都没有在我的localhost中工作。

我想它必须是与缓存或索引有关的东西,但有人可以帮助我吗?我被卡住了。

更新

抱歉,我没有提供更多信息。我想这是深夜,我很累。

权限没问题,提交后文件在服务器中,一切似乎都没问题。现在我注意到,当我想添加一个新项目时,它会给我一个错误:

500 |内部服务器错误| Zend_Search_Lucene_Exception     索引在指定目录中不存在。

在我的数据/文件夹中,我有lucene之前创建的podcast.dev.index和podcast.prod.index文件夹。

我的PodcastTable.class.php文件的代码是:

 public static function getLuceneIndex() {

    ProjectConfiguration::registerZend();

    if (file_exists($index = PodcastTable::getLuceneIndexFile())) {
        return Zend_Search_Lucene::open($index);
    } else {
        return Zend_Search_Lucene::create($index);
    }
}

public static function getLuceneIndexFile() {
    return sfConfig::get('sf_data_dir') . '/podcast.' . sfConfig::get('sf_environment') . '.index';
}

public function getForLuceneQuery($query, $execute = true) {
    $hits = self::getLuceneIndex()->find($query);

    $pks = array();
    foreach ($hits as $hit) {
        $pks[] = $hit->pk;
    }

    if (empty($pks)) {
        return array();
    }

    $q = $this->createQuery('p')
                    ->where('p.is_published = 1')
                    ->andWhereIn('p.podcast_id', $pks)
                    //->limit(Doctrine_Core::getTable('Configuracion')->getPodcastsPerPage())
                    ->orderBy('p.podcast_id desc');
    if (!$execute){
        return $q;
    }
    return $q->execute();
}

在Podcast.class.php文件中:

public function save(Doctrine_Connection $conn = null) {
    // ...
        $ret = parent::save($conn);

        $this->updateLuceneIndex();

         return $ret;
}

public function delete(Doctrine_Connection $conn = null) {
    $index = PodcastTable::getLuceneIndex();

    if ($hit = $index->find('pk:' . $this->getPodcastId())) {
        $index->delete($hit->id);
    }

    return parent::delete($conn);
}

public function updateLuceneIndex() {
    $index = PodcastTable::getLuceneIndex();

    // remove an existing entry
    if ($hit = $index->find('pk:' . $this->getPodcastId())) {
        $index->delete($hit->podcastId);
    }

    $isActive = $this->getIsPublished();

    // don't index expired and non-activated jobs
    if (!$isActive) {
        return;
    }

    $doc = new Zend_Search_Lucene_Document();

    // store job primary key URL to identify it in the search results
    $doc->addField(Zend_Search_Lucene_Field::UnIndexed('pk', $this->getPodcastId()));

    // index job fields
    $doc->addField(Zend_Search_Lucene_Field::UnStored('name', $this->getPodcastName(), 'utf-8'));
    $doc->addField(Zend_Search_Lucene_Field::UnStored('description', $this->getPodcastDescription(), 'utf-8'));
    $doc->addField(Zend_Search_Lucene_Field::UnStored('image', $this->getImagePath(), 'utf-8'));        

    // add job to the index
    $index->addDocument($doc);
    $index->commit();
}

之前曾经有过工作但现在已经不复存在了。

1 个答案:

答案 0 :(得分:0)

如果没有任何进一步的信息,我会建议你在教程中安装的Zend Framework没有保存在SVN中...重新安装非常简单......

  • 只需从here

  • 下载Zend Framework即可
  • 将其解压缩到服务器上的lib/vendor/Zend/目录

  • 要使用搜索,您只需保留以下文件/文件夹:

    • Exception.php
    • 装载机/
    • Autoloader.php
    • 搜索/