2011-12-09 131 views
1

解決Lucene搜索停止用symfony工作

看起來工作時,你很累是不一樣的,你有一個良好的夜間睡眠後的工作。問題在於prod.dev.index中的文件。他們失蹤了。我重新創建了它,並且工作。


我正在使用symfony 1.4與教條和Zend Lucene搜索集成。當我第一次安裝Jobeet教程時,它正在工作。我通過svn將項目上傳到另一臺服務器,並且在那裏根本不起作用。現在它甚至不在我的本地主機上工作。

我想它必須是與緩存或索引相關的東西,但任何人都可以幫助我嗎?我卡住了。

更新

對不起,我沒有給出更多信息。我想這是深夜,我很累。

權限正常,文件在提交後在服務器中,並且一切似乎都正常。現在我注意到,當我想添加一個新的項目,它給了我錯誤:

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

我們需要比 「不工作」 的更多信息。什麼不行,什麼?日誌中的任何內容?文件權限是否正常? – Maerlyn

回答

0

沒有任何進一步的信息,我建議你安裝Zend Framework中的教程是不是保持內SVN ...它很簡單,重新安裝...

  • 只需下載Zend框架從here

  • 解壓到您的服務器上的目錄lib/vendor/Zend/

  • 要使用你只需要記住以下文件/文件夾搜索:

    • Exception.php
    • 裝載機/
    • Autoloader.php
    • 搜索/