1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
|
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 24249 -->
<!-- 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>
|