{SF}Lucene moteur de recherche ne retourne rien

Rechercher

{SF}Lucene moteur de recherche ne retourne rien

Par saturn1  -  2 reponses  -  Le 22/02/2009 22:46  -  Editer  - 

Salut j'ai remarqué que ces temps ci tu n'aidait pas trop sur le forum mais comme je vois que tu es là ce soir je me dis on sait jamais je poste mon problème :p

Jai suivi le tutoriel de Jobeet pour installer un moteur de recherche sur mon site!! Le seul problème c'est que je n'ai pas d'erreur mais le moteur de recherche ne me retourne jamais aucun résultat... :'( Donc voici le code lié au moteur :

 

//GeekGeekerie.class.php
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 delete(Doctrine_Connection $conn = null)
  {
    $index = $this->getTable()->getLuceneIndex();
    if ($hit = $index->find('pk:'.$this->getId()))
    {
      $index->delete($hit->id);
    }
    return parent::delete($conn);
  }
  public function updateLuceneIndex()
  {
    $index = $this->getTable()->getLuceneIndex();
    // remove an existing entry
    if ($hit = $index->find('pk:'.$this->getId()))
    {
      $index->delete($hit->id);
    }
    // don't index non active geekerie
    if (!$this->isActive($this))
    {
      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->getId()));
    // index job fields
    $doc->addField(Zend_Search_Lucene_Field::UnStored('content', $this->getContent(), 'utf-8'));
    $doc->addField(Zend_Search_Lucene_Field::UnStored('author', $this->getAuthor(), 'utf-8'));
    // add job to the index
    $index->addDocument($doc);
    $index->commit();
  }
//GeekGeekerieTable.class.php
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').'/geekerie.'.sfConfig::get('sf_environment').'.index';
  }
  public function getForLuceneQuery($query)
  {
    $hits = $this->getLuceneIndex()->find($query);
    $pks = array();
    foreach ($hits as $hit)
    {
      $pks[] = $hit->pk;
    }
    if (empty($pks))
    {
      return 'no results';
    }
    $q = $this->createQuery('g')
      ->whereIn('g.id', $pks)
      ->limit(20);
    return $q->execute();
  }
//L'action
public function executeSearch(sfWebRequest $request)
  {
    if (!$query = $request->getParameter('query'))
    {
      return $this->forward('geekerie', 'index');
    }
    $this->geek_geekerie_list = Doctrine::getTable('GeekGeekerie')->getForLuceneQuery($query);
    echo $this->geek_geekerie_list;
  }
//Le tpl
<?php foreach ($geek_geekerie_list as $geek_geekerie): ?>
  <?php include_partial('geekerie', array('geek_geekerie' => $geek_geekerie,'aVote' => $aVote)); ?>
<?php endforeach; ?>

Merci si tu as le temps et l'envie de m'aider ;)

 

 

Réponses apportées à cette discussion

Par Emacs  -  Le 23/02/2009 13:09  -  Haut de page  - 

Malheureusement, je n'ai jamais eu l'occasion de tester l'indexeur Lucene. Demande du côté des forums de symfony à tout hasard.

 
Par saturn1  -  Le 23/02/2009 15:53  -  Haut de page  - 

Ok je vais voir mais quand on a tendance à mettre des codes trop long les réponses se font rares!

Merci tout de même ;)

 

Ajouter une réponse à la discussion

Seuls les membres connectés sont autorisés à poster dans les forums !

Identifiez-vous
Join |  ID/MDP? |