Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.06.2012, 10:35   #1
NecroArt
 
Регистрация: 09.08.2010
Сообщений: 8
По умолчанию Не работает поиск Zend Lucene в Symfony

Здравствуйте. Пишем сайт на symfony. Дошла очередь до поиска. Сделал всё, как написано в туториале с изменением названий полей. Внедрил поиск в лейаут, но результатов он не выдаёт - то есть перенаправляет на пустую страницу. Вроде поняли, что это из-за нашей интернационализации - есть два языка ru и en, но как с ними быть не очень понятно. В туториале интернационализация рассматривалась после поиска, так что при его построении учтена не была. Интересная страница содержит полезную информацию, но как использовать этот код я так и не понял. Не могли бы вы подсказать, как нужно написать поиск? Вот код файлов страниц из моделей ,для которых пытаюсь его реализовать:
nitmagHomePage.class.php
PHP код:
<?php

/**
 * nitmagHomePage
 * 
 * This class has been auto-generated by the Doctrine ORM Framework
 * 
 * @package    site
 * @subpackage model
 * @author     Your name here
 * @version    SVN: $Id: Builder.php 7490 2010-03-29 19:53:27Z jwage $
 */
class nitmagHomePage extends BasenitmagHomePage
{
  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 nitmagHomePageTable::getLuceneIndex();
   
    
// удалить существующие записи
    
foreach ($index->find('pk:'.$this->getId()) as $hit)
    {
      
$index->delete($hit->id);
    }
    
    
$doc = new Zend_Search_Lucene_Document();
   
    
// сохраняем первичный ключ для идентификации в результатах поиска
    
$doc->addField(Zend_Search_Lucene_Field::Keyword('pk'$this->getId()));
   
    
// индексируем поле
    
$doc->addField(Zend_Search_Lucene_Field::UnStored('name'$this->getName(), 'utf-8'));
    
    
// добавляем в индекс
    
$index->addDocument($doc);
    
$index->commit();

  
  public function 
delete(Doctrine_Connection $conn null)
  {
    
$index nitmagHomePageTable::getLuceneIndex();
   
    foreach (
$index->find('pk:'.$this->getId()) as $hit)
    {
      
$index->delete($hit->id);
    }
   
    return 
parent::delete($conn);
  }
}
nitmagHomePageTable.class.php
PHP код:
<?php

/**
 * nitmagHomePageTable
 * 
 * This class has been auto-generated by the Doctrine ORM Framework
 */
class nitmagHomePageTable extends Doctrine_Table
{
    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);
        }
    }
     
    static public function 
getLuceneIndexFile()
    {
        return 
sfConfig::get('sf_data_dir').'/homePage.'.sfConfig::get('sf_environment').'.index';
    }
    
/**
     * Returns an instance of this class.
     *
     * @return object nitmagHomePageTable
     */
    
public static function getInstance()
    {
        return 
Doctrine_Core::getTable('nitmagHomePage');
    }
    public function 
getForLuceneQuery($query)
    {
      
$hits self::getLuceneIndex()->find($query);
     
      
$pks = array();
      foreach (
$hits as $hit)
      {
        
$pks[] = $hit->pk;
      }
     
      if (empty(
$pks))
      {
        return array();
      }
     
      
$q $this->createQuery('j')
        ->
whereIn('j.id'$pks)
        ->
limit(20);
     
      
$q $this->addActiveJobsQuery($q);
     
      return 
$q->execute();
    }
}
из схемы базы данных:

Код:
nitmagHomePage:
  actAs:
    I18n:
      fields: [name]
  columns:
    name: { type: text, notnull: true }
NecroArt вне форума Ответить с цитированием
Старый 26.11.2012, 12:22   #2
NecroArt
 
Регистрация: 09.08.2010
Сообщений: 8
По умолчанию

Ну и хрен с ним. Проект сдали со словами "Поиск тут не нужен".
NecroArt вне форума Ответить с цитированием
Старый 26.11.2012, 12:40   #3
masax
Форумчанин
 
Регистрация: 01.10.2008
Сообщений: 248
По умолчанию


ай да молодец! )))
Контакты
skype, почта: bm@kwax.ru
masax вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Symfony 1.4 maryan.vetrov PHP 1 06.04.2011 11:43
Фреймворк симфони (symfony) zero50x PHP 0 14.02.2011 08:10
NetBeans PHP. Настройка Symfony [Smarik] PHP 3 30.06.2010 18:14