{SF}Lucene moteur de recherche ne retourne rien
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
Malheureusement, je n'ai jamais eu l'occasion de tester l'indexeur Lucene. Demande du côté des forums de symfony à tout hasard.
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 ;)