Table des matières
Zend_Search_Lucene est un moteur de recherche textuel général totalement écrit en PHP 5. Bien qu'il stocke ses index dans le système de fichiers, et ne nécessite pas de base de données, il peut ajouter des capacités de recherche sur presque tous les sites PHP utilisant une base de données. Zend_Search_Lucene supporte les fonctionnalités suivantes :
Recherche par pertinence - les meilleurs résultats sont retournés en premier
Beaucoup de type de puissantes recherche : recherche sur des phrases, recherche joker, recherche de proximité, recherche par intervalle et bien plus [5]
Recherche par champs spécifiques (e.i., titre, auteur, contenu)
Zend_Search_Lucene est dérivé du projet Apache Lucene. Pour plus d'informations vous pouvez visiter http://lucene.apache.org/java/docs/.
ZSearch considère les documents comme des sujets atomiques pour l'indexation. Un document est divisé en champs nommés, et les champs ont du contenu dans lequel on peut rechercher.
Un document est representé par l'objet Zend_Search_Lucene_Document, et cet objet contient des objets Zend_Search_Lucene_Field qui représentent les champs.
Il est important de noter qu'aucune sorte d'information peut être ajoutée à l'index. Les informations spécifiques à l'application, ou les métadonnées peuvent être stockées dans les champs du document, et retrouvées ensuite pendant la recherche.
Il est de votre responsabilité de contrôler l'indexeur. Cela signifie que les données peuvent-être indexées à partir de n'importe quelle source accessible par votre application. Cela peut-être aussi bien le système de fichiers, qu'une base de données, qu'un formulaire HTML, etc.
La classe Zend_Search_Lucene_Field
fournit plusieurs méthodes statiques pour créer
des champs de différentes caractéristiques :
<?php $doc = new Zend_Search_Lucene_Document(); // Field is not tokenized, but is indexed and stored within the index. // Stored fields can be retrived from the index. $doc->addField(Zend_Search_Lucene_Field::Keyword('doctype', 'autogenerated')); // Field is not tokenized nor indexed, but is stored in the index. $doc->addField(Zend_Search_Lucene_Field::UnIndexed('created', time())); // Binary String valued Field that is not tokenized nor indexed, // but is stored in the index. $doc->addField(Zend_Search_Lucene_Field::Binary('icon', $iconData)); // Field is tokenized and indexed, and is stored in the index. $doc->addField(Zend_Search_Lucene_Field::Text('annotation', 'Document annotation text')); // Field is tokenized and indexed, but that is not stored in the index. $doc->addField(Zend_Search_Lucene_Field::UnStored('contents', 'My document content')); ?>
Vous pouvez donner le nom que vous voulez aux champs. Le nom "contents" est utilisé par défaut. C'est une bonne idée de placer les principales données de votre document dans le champ ainsi nommé.
Les champs Keyword
sont stockés et indexés, c'est à dire qu'il est possible de rechercher
dedans, aussi bien que les afficher dans les résultats de recherche.
Ils ne sont pas séparés en mots par un processus de tokenization.
Les champs énumérés d'une base de données se traduisent bien en champs Keyword
pour Zend_Search_Lucene.
Les champs UnIndexed
n'offrent pas de possibilité de recherche, mais sont retournés
avec les résultats de recherche.
Les timestamps et clés primaires de base de données, chemins du système de fichiers, et tout autre
identifiant externe sont de bons candidats pour des champs UnIndexed
.
Les champs Binary
ne sont ni tokenizés, ni indexés, mais sont stockés pour être récupérés
avec les résultats de recherche.
Ils peuvent être utilisés pour stocker toute donnée encodée comme chaine binaire, comme par exemple
des icônes.
Les champs Text
sont stockés, indexés et tokenizés. Les champs Text
sont
bien appropriés pour stocker des informations comme des sujets et titres qui doivent être recherchables
aussi bien que retournés avec les résultats de recherche.
Les champs UnStored
sont tokenizés et indexés, mais pas stockés dans l'index.
Les grandes quantités de texte sont mieux indexées en utilisant ce type de champ. Stocker
de données crée un index plus grand sur le disque, donc si vous avez besoin d'effectuer une
recherche, mais de ne pas ré-afficher les données, utiliser le champ UnStored
.
Les champs UnStored
sont pratiques lorsque l'on souhaite utiliser un index Zend_Search_Lucene
en combinaison avec une base de données relationnelle. Vous pouvez indexer de gros champs de fichiers dédiés
à la recherche avec les champs UnStored
, et les récupérer depuis votre base de données en utilisant
un champ séparé comme identifiant.