1

解決した

非常に疲れているときに働くことは、ぐっすり眠った後に働くことと同じではないようです。問題は、prod.dev.index 内のファイルにありました。彼らは行方不明でした。私はそれらを再作成しましたが、うまくいきました。


doctrine と Zend Lucene Search が統合された symfony 1.4 を使用しています。Jobeetチュートリアルに従って最初にインストールしたときは、完璧に機能していました。プロジェクトをsvn経由で別のサーバーにアップロードしましたが、まったく機能しません。現在、私のローカルホストでも機能していません。

キャッシュまたはインデックスに関連するものに違いないと思いますが、ここで誰か助けてもらえますか? 私は立ち往生しています。

アップデート

申し訳ありませんが、これ以上の情報を提供しませんでした。夜遅くだったので、とても疲れていたと思います。

権限は問題ありません。ファイルはコミット後にサーバーにあり、すべて問題ないようです。今、新しいアイテムを追加したいときにエラーが発生することに気付きました:

500 | 内部サーバー エラー | Zend_Search_Lucene_Exception インデックスが指定されたディレクトリに存在しません。

私の data/ フォルダーには、前に 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();
}

以前は機能していましたが、現在は機能していません。

4

1 に答える 1

0

これ以上の情報がなければ、チュートリアル中にインストールした Zend Framework が SVN 内に保持されていなかったことをお勧めします...再インストールは非常に簡単です...

  • ここからZend Frameworkをダウンロードするだけです

  • lib/vendor/Zend/サーバー上のディレクトリに解凍します

  • 検索を使用するには、次のファイル/フォルダーのみを保持する必要があります。

    • Exception.php
    • ローダ/
    • Autoloader.php
    • 探す/
于 2011-12-09T09:47:36.167 に答える