Une fois que nous avons créé un index, nous sommes prêt à utiliser zend search lucene pour effectuer une recherche dans notre site web. Dans notre exemple, le mot clé sera récupéré par la fonction getParam() de l’objet Zend Controller et utilisé pour récupéré des résultats pertinents dans les données déjà indexés.
Encore une fois le code suivant est dans un contexte MVC et utilise Zend_Application. L’inclusion des classes Zend est donc implicite.
Le paramètre reçu vient d’un formulaire de recherche (objet zend form). Voici le code d’une action qui affiche le résultat d’une recherche :
public function articlesAction()
{
//Récupération du paramêtre
$queryStr = $this->_getParam('r');
$message = "";
if(!isset($queryStr) || $queryStr == "")
{
$this->_helper->redirector('index');
}
// Ouverture de l'index
$index = Zend_Search_Lucene::open(BASE_PATH . '/decryptages_index');
// Execution de la requête et récupérations des résultats
$results = $index->find($queryStr);
$message = "L'index contient " . $index->count() . " document(s)";
// Test si j'ai des résultats
if($results)
{
$count = 0;
$data = array();
foreach($results as $result)
{
$data[$count]['slug'] = $result->slug;
$data[$count]['id'] = $result->id;
$data[$count]['dateCreation'] = $result->dateCreation;
$data[$count]['titre'] = utf8_decode($result->titre);
$data[$count]['chapeau'] = $result->chapeau;
$data[$count]['categorie'] = $result->categorie;
$count++;
}
$this->view->results = $data;
$this->view->message = $message;
}
}
Récupération du mot clé pour effectuer la recherche.
Initialisation d’une variable message que je passerai ensuite à la vue.
Je vérifie qu’il ne soit pas vide.
$queryStr = $this->_getParam('r');
$message = "";
<pre>if(!isset($queryStr) || $queryStr == "")
{
$this->_helper->redirector('index');
}
Pour rechercher des données, je commence par ouvrir l’index en passant en paramètre le chemin du dossier.
$index = Zend_Search_Lucene::open(BASE_PATH . '/decryptages_index');
Nous utilisons ensuite la méthode find de Zend Search Lucene en lui passant le mot clé recherché.
$results = $index->find($queryStr);
La fonction count() permet quand à elle de retourner le nombre de document enregistrés dans l’index.
$index->count()
Pour finir, je teste si $results contient des résultats. Si oui j’initialise une variable $data qui contiendra chaque résultat. Dans le cas contraire je retourne un message qui indique qu’aucune donnée n’a été retournée.
if($results)
{
$count = 0;
$data = array();
foreach($results as $result)
{
$data[$count]['slug'] = $result->slug;
$data[$count]['id'] = $result->id;
$data[$count]['dateCreation'] = $result->dateCreation;
$data[$count]['titre'] = utf8_decode($result->titre);
$data[$count]['chapeau'] = $result->chapeau;
$data[$count]['categorie'] = $result->categorie;
$count++;
}
$this->view->results = $data;
$this->view->message = $message;
}
else
{
$this->view->message = "Aucun résultat retourné.";
}
Le code de ma vue :
<h1>Résultats de notre recherche</h1>
message)) : ?>
message; ?>
results)) : ?>
results as $result) : ?>
<a href="<?php echo $this->baseUrl() . "/actualite/" . $result[">' title=''></a>
Un exemple des résultats retournés lorsque je passe le paramètre « ouvrage » (/search/articles/r/ouvrage). 
Zend Search Lucene : Création d’un index à partir de données stockées en base de données MySQL
Articles en relation :