|
|
@@ -0,0 +1,96 @@
|
|
|
+<?xml version="1.0" encoding="utf-8"?>
|
|
|
+<!-- EN-Revision: 19807 -->
|
|
|
+<!-- Reviewed: no -->
|
|
|
+<sect1 id="learning.lucene.intro">
|
|
|
+ <title>Introduction à Zend_Search_Lucene</title>
|
|
|
+ <para>
|
|
|
+ Le composant <classname>Zend_Search_Lucene</classname> est prévu pour fournir une
|
|
|
+ solution de recherche full-text prête à l'emploi. Il ne nécessite aucunes extensions
|
|
|
+ <acronym>PHP</acronym><footnote><para>Bien que quelques fonctionnalités de traitement
|
|
|
+ <acronym>UTF-8</acronym> nécessitent que l'extension
|
|
|
+ <emphasis>mbstring</emphasis> soit activée
|
|
|
+ </para></footnote> ni que des logiciels supplémentaires soient installés, et peut
|
|
|
+ être utilisé tout de suite après l'installation du Framework Zend.
|
|
|
+ </para>
|
|
|
+ <para>
|
|
|
+ <classname>Zend_Search_Lucene</classname> est un portage <acronym>PHP</acronym> du
|
|
|
+ moteur de recherche full-text open source populaire connu comme Apache Lucene. Voir <ulink
|
|
|
+ url="http://lucene.apache.org">http://lucene.apache.org/</ulink> pour plus de détails.
|
|
|
+ </para>
|
|
|
+ <para>
|
|
|
+ L'information doit être indexée pour être disponible à la recherche.
|
|
|
+ <classname>Zend_Search_Lucene</classname> et Java Lucene utilise un concept de document
|
|
|
+ connu sous le nom d'"indexation atomique d'élément."
|
|
|
+ </para>
|
|
|
+ <para>
|
|
|
+ Chaque document est un ensemble de champs : paires <nom, valeur> où le nom et la
|
|
|
+ valeur sont des chaînes <acronym>UTF-8</acronym> <footnote><para>Les chaînes Binaires sont
|
|
|
+ aussi autorisées pour être utilisées comme des valeurs de champs</para></footnote>.
|
|
|
+ N'importe quel sous ensemble de champs de document peut être marqué comme "indexé"
|
|
|
+ pour inclure des données de champ durant le processus d'indexation de texte.
|
|
|
+ </para>
|
|
|
+ <para>
|
|
|
+ Les valeurs de champs peuvent être indexées segmentées durant l'indexation. Si un champ
|
|
|
+ n'est pas segmenté, alors la valeur du champ est stockée comme un seul terme ; autrement,
|
|
|
+ l'analyseur courant est utilisé pour la segmentation.
|
|
|
+ </para>
|
|
|
+ <para>
|
|
|
+ Plusieurs analyseurs sont fournis dans le paquet <classname>Zend_Search_Lucene</classname>.
|
|
|
+ L'analyseur par défaut fonctionne avec du texte <acronym>ASCII</acronym> (comme l'analyseur
|
|
|
+ <acronym>UTF-8</acronym> a besoin que l'extension <emphasis>mbstring</emphasis> soit activée).
|
|
|
+ Il n'est pas sensible à la case, et saute les nombres. Utilisez d'autres analyseurs ou
|
|
|
+ créez votre propre analyseur si vous avez besoin de changer ce comportement.
|
|
|
+ </para>
|
|
|
+ <note>
|
|
|
+ <title>Utilisation des analyseurs durant l'indexation et la recherche</title>
|
|
|
+ <para>
|
|
|
+ Note importante ! Les requêtes de recherches sont aussi segmentées en utilisant
|
|
|
+ "l'analyseur courant", ainsi le même analyseur doit être défini par défaut durant
|
|
|
+ le processus d'indexation et le processus de recherche. Ceci garantira que la source
|
|
|
+ et le texte recherché seront transformés en termes de la même manière.
|
|
|
+ </para>
|
|
|
+ </note>
|
|
|
+ <para>
|
|
|
+ Les valeurs de champs sont stockés optionnellement au sein de l'index. Ceci permet aux
|
|
|
+ données originale du champ d'être récupérée pendant la recherche. C'est le seul moyen
|
|
|
+ d'associer les résultats de recherche avec les données originales (l'ID interne du
|
|
|
+ document peut avoir changé après une optimisation d'index ou une auto-optimisation).
|
|
|
+ </para>
|
|
|
+ <para>
|
|
|
+ Ce qui doit être gardé en mémoire, c'est que l'index Lucene n'est pas une base de données.
|
|
|
+ Il ne fournit pas un mécanisme de sauvegarde de l'index à l'exception de la sauvegarde
|
|
|
+ du répertoire du système de fichier. Il ne fournit pas de mécanisme transactionnel bien
|
|
|
+ que soient supportés la mise à jour concurrente d'index ainsi que que la mise à jour
|
|
|
+ et la lecture concurrente. Il n'est pas comparable aux bases de données en terme de
|
|
|
+ vitesse de récupération de données.
|
|
|
+ </para>
|
|
|
+ <para>
|
|
|
+ Donc c'est une bonne idée :
|
|
|
+ </para>
|
|
|
+ <itemizedlist>
|
|
|
+ <listitem>
|
|
|
+ <para>
|
|
|
+ <emphasis>De ne pas</emphasis> utiliser l'index Lucene comme du stockage car cela
|
|
|
+ réduirait les performance de récupération de résultat de recherche. Stocker
|
|
|
+ uniquement les identifiants de documents (chemin de documents,
|
|
|
+ <acronym>URL</acronym>s, identifiant unique de base données) et associer les
|
|
|
+ données au sein de l'index. Ex. titre, annotation, categorie, information de langue,
|
|
|
+ avatar. (Note : un champs peut être inclu dans l'indexation, mais pas stocké, ou
|
|
|
+ stocké, mais pas indexé).
|
|
|
+ </para>
|
|
|
+ </listitem>
|
|
|
+ <listitem>
|
|
|
+ <para>
|
|
|
+ D'écrire des fonctionalités qui peuvent reconstruire intégralement l'index, si il
|
|
|
+ a été corrompu pour une raison ou pour une autre.
|
|
|
+ </para>
|
|
|
+ </listitem>
|
|
|
+ </itemizedlist>
|
|
|
+ <para>
|
|
|
+ Les documents individuels dans l'index peuvent avoir des ensemble de champs totalement
|
|
|
+ différents. Le même champ dans différents documents n'a pas besoin d'avoir les mêmes
|
|
|
+ attributs. Ex. un champs peu être indexé pour l'un des documents mais sauté pour
|
|
|
+ l'indexation d'un autre. Le même principe s'applique au stockage, à la segmentation,
|
|
|
+ ou traitement de valeur de champ comme chaîne binaire.
|
|
|
+ </para>
|
|
|
+</sect1>
|