<?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 &lt;nom, valeur&gt; 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>
