Il existe deux méthode pour rechercher dans l'index. La première utiliser Query Parser pour créer une requête à partir d'une chaîne de caractères La seconde fournit la possibilité de créer vos propres requêtes à travers l'API Zend_Search_Lucene.
Avant de choisir d'utiliser le Query Parser fournit, veuillez prendre en compte les points suivants :
Les deux méthodes utilisent la même API pour chercher dans l'index :
<?php require_once('Zend/Search/Lucene.php'); $index = new Zend_Search_Lucene('/donnees/mon-index'); $index->find($query); ?>
La méthode Zend_Search_Lucene::find()
détermine automatiquement le type en entrée et
utilise le Query Parser pour construire l'objet Zend_Search_Lucene_Search_Query à partir
d'une chaîne de caractères.
Il est important de noter que find()
EST sensible à la casse.
Par défaut, LuceneIndexCreation.jar normalise tous les document en minuscule.
Ceci peut être désactivé avec une ligne de commande (saisissez LuceneIndexCreation.jar
sans arguments pour de l'aide). La casse du texte fournit à find()
doit
correspondre à l'index. Si l'index est normalisé en minuscule, alors tous le texte fournit
à find()
doit être passé dans strtolower()
, sinon il n'y aura peut-être
aucune correspondance.
Le résultat de recherche est un tableau d'objets Zend_Search_Lucene_Search_QueryHit. Chacun possède deux
propriétés : $hit->document
est le nombre de document dans l'index et $hit->score
est un score du hit dans le résultat de recherche. Le résultat est trié par score (les meilleurs scores en premier).
L'objet Zend_Search_Lucene_Search_QueryHit expose aussi chaque champ de Zend_Search_Lucene_Document trouvé par le hit, comme une propriété de ce hit. Dans cet exempl, un hit est retourné et le document correspondant à deux champs : titre et auteur.
<?php require_once('Zend/Search/Lucene.php'); $index = new Zend_Search_Lucene('/donnees/mon-index'); $hits = $index->find($query); foreach ($hits as $hit) { echo $hit->id; echo $hit->score; echo $hit->titre; echo $hit->auteur; } ?>
Optionnellement, l'objet Zend_Search_Lucene_Document orginial peut-être retourné à partir de
Zend_Search_Lucene_Search_QueryHit.
Vous pouvez retrouver les parties indexée du document en utilisant la méthode getDocument()
de l'objet index, et ainsi les récupérer par la méthode getFieldValue()
:
<?php require_once('Zend/Search/Lucene.php'); $index = new Zend_Search_Lucene('/donnees/mon-index'); $hits = $index->find($query); foreach ($hits as $hit) { // retourn l'objet Zend_Search_Lucene_Document pour ce hit echo $document = $hit->getDocument(); // retourne un objet Zend_Search_Lucene_Field // à partir de Zend_Search_Lucene_Document echo $document->getField('title'); // retourne la valeur de l'objet Zend_Search_Lucene_Field echo $document->getFieldValue('title'); // identique à getFieldValue() echo $document->title; } ?>
Les champs disponibles de l'objet Zend_Search_Lucene_Document sont déterminés au moment de l'indexation. Les champs de document sont soit indexés, soit indexés et stockés dans le document par l'application qui indexe (i.e LuceneIndexCreation.jar).
Faites attention, l'identité du document ('path' dans notre exemple) est aussi stocké dans les indexes et doit être retrouvé à partir d'eux.
Zend_Search_Lucene utilise le même algorithme de scoring que Java Lucene. Les résultats de recherche sont triés par score, dans l'ordre décroissant.
Différents score signifie qu'un document correspond à la requête plus qu'un autre.
Pour être franc, les hits de recherche qui contiennent de termes de recherche ou des phrases plus fréquentes, obtiennent de plus grands scores.
Le score peut-être retrouvé par la propriété score
du hit :
<?php $hits = $index->find($query); foreach ($hits as $hit) { echo $hit->id; echo $hit->score; } ?>
La classe Zend_Search_Lucene_Search_Similarity est utilisée pour calculer le score. Pour plus de détails, lisez Extensibilité. Algorithme des score. Zend_Search_Lucene_Search_Similarity class is used to calculate score.