| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496 |
- <!-- EN-Revision: 14448 -->
- <sect1 id="zend.search.lucene.overview">
- <title>Vue d'ensemble</title>
- <sect2 id="zend.search.lucene.introduction">
- <title>Introduction</title>
- <para><classname>Zend_Search_Lucene</classname> est un moteur de recherche de contenus principalement textuels écrit
- entièrement en PHP 5. Comme il stocke ses index sur le système de fichiers et qu'il ne requiert pas de base de
- données, il peut offrir des fonctionnalités de recherche à presque n'importe quel site écrit en PHP.
- <classname>Zend_Search_Lucene</classname> dispose des caractéristiques suivantes : <itemizedlist>
- <listitem>
- <para>"Ranked searching" - les meilleurs résultats sont retournés en premier.</para>
- </listitem>
- <listitem>
- <para>Plusieurs puissants types de requêtes : phrase, booléen, astérisque, proximité, intervalle et
- bien d'autres.</para>
- </listitem>
- <listitem>
- <para>Recherche par champ spécifique (p. ex. titre, auteur, contenus)</para>
- </listitem>
- </itemizedlist> <classname>Zend_Search_Lucene</classname> est dérivé du projet Apache Lucene. Les versions actuelles
- de format d'index Lucene supportées (à partir de Zend Framework 1.6) sont 1.4 à 2.3. Pour plus d'informations
- sur Lucene, rendez-vous sur <ulink url="http://lucene.apache.org/java/docs/"></ulink>.</para>
- <note>
- <title></title>
- <para>Les implémentations précédentes de <classname>Zend_Search_Lucene</classname> supportent les formats d'indexation
- Lucene 1.4 (1.9) à 2.1.</para>
- <para>A partir de Zend Framework 1.5, tout index créé en utilisant une version antérieure à la 2.1 et
- automatiquement mis à niveau au format Lucene 2.1 après la mise à jour de <classname>Zend_Search_Lucene</classname> et
- ne sera pas compatible avec les implémentations de <classname>Zend_Search_Lucene</classname> incluses dans Zend
- Framework 1.0.x.</para>
- </note>
- </sect2>
- <sect2 id="zend.search.lucene.index-creation.documents-and-fields">
- <title>Objet "Document" and "Field"</title>
- <para><classname>Zend_Search_Lucene</classname> travaille avec des documents comme objets de base pour
- l'indexation. Un document est divisé en champs possédant un nom et du contenu dans lequel on pourra
- chercher.</para>
- <para>Un document est représenté par la classe <classname>Zend_Search_Lucene_Document</classname>. Les objets de cette
- classe contiennent des instances de <classname>Zend_Search_Lucene_Field</classname> qui représentent les champs du
- document.</para>
- <para>Il est important de noter que n'importe quelle information peut être ajoutée à l'index. Des informations
- propres à l'application ou des métadonnées peuvent être stockées dans le document, puis récupérées durant la
- recherche.</para>
- <para>Il est de la responsabilité de votre application de gérer l'indexation. Cela signifie que les données
- peuvent être indexées depuis n'importe quelle source accessible par votre application. Par exemple, elles
- peuvent provenir du système de fichier, d'une base de données, d'un formulaire HTML, etc.</para>
- <para>La classe <classname>Zend_Search_Lucene_Field</classname> fournit plusieurs méthodes statiques pour créer des champs
- avec différentes caractéristiques :</para>
- <programlisting role="php"><![CDATA[
- $doc = new Zend_Search_Lucene_Document();
- // Le champ n'est pas "tokenizé", mais il est indexé et stocké dans l'index.
- // Les champs stockés peuvent être récupéré depuis l'index.
- $doc->addField(Zend_Search_Lucene_Field::Keyword('doctype',
- 'autogenerated'));
- // Le champ n'est ni "tokenizé", ni indexé, mais il est stocké dans l'index.
- $doc->addField(Zend_Search_Lucene_Field::UnIndexed('created',
- time()));
- // Un champ chaîne binaire qui n'est ni "tokenizé", ni indexé, mais
- // stocké dans l'index.
- $doc->addField(Zend_Search_Lucene_Field::Binary('icon',
- $iconData));
- // Un champ "tokenizé", indexé et stocké dans l'index.
- $doc->addField(Zend_Search_Lucene_Field::Text('annotation',
- 'Document annotation text'));
- // Un champ "tokenizé" et indexé, mais pas stocké dans l'index.
- $doc->addField(Zend_Search_Lucene_Field::UnStored('contents',
- 'My document content'));
- ]]></programlisting>
- <para>Chacune de ces méthodes (à l'exception de <classname>Zend_Search_Lucene_Field::Binary()</classname>) possède un
- paramètre optionnel <code>$encoding</code> servant à spécifier l'encodage de la chaîne entrée.</para>
- <para>L'encodage peut différer par document, voire par champ au sein d'un même document : <programlisting
- role="php"><![CDATA[
- $doc = new Zend_Search_Lucene_Document();
- $doc->addField(Zend_Search_Lucene_Field::Text('title',
- $title,
- 'iso-8859-1'));
- $doc->addField(Zend_Search_Lucene_Field::UnStored('contents',
- $contents,
- 'utf-8'));
- ]]></programlisting></para>
- <para>Si le paramètre d'encodage est omis, la locale courante est alors utilisée pour le déterminer à
- l'exécution. Par exemple : <programlisting role="php"><![CDATA[
- setlocale(LC_ALL, 'de_DE.iso-8859-1');
- ...
- $doc->addField(Zend_Search_Lucene_Field::UnStored('contents', $contents));
- ]]></programlisting></para>
- <para>Les champs sont toujours stockés et retournés depuis l'index en UTF-8. Toute conversion requise vers UTF-8
- est effectuée automatiquement.</para>
- <para>Les analyseurs de texte (<link linkend="zend.search.lucene.extending.analysis">voir plus bas</link>)
- peuvent également convertir du texte vers d'autres encodages. Actuellement, l'analyseur par défaut convertit le
- texte au format "ASCII/TRANSLIT". Soyez prudent, cependant; cette conversion peut déprendre de la locale.</para>
- <para>Le nom des champs est défini par vous dans la méthode <code>addField()</code>.</para>
- <para>Java Lucene utilise le champ "contents" comme champ de recherche par défaut.
- <classname>Zend_Search_Lucene</classname> cherche par défaut dans tous les champs. Cela dit, ce comportement est
- configurable. Consultez le chapitre <link linkend="zend.search.lucene.query-language.fields">"Champ de recherche
- par défaut"</link> pour plus de détails.</para>
- </sect2>
- <sect2 id="zend.search.lucene.index-creation.understanding-field-types">
- <title>Comprendre les types de champs</title>
- <itemizedlist>
- <listitem>
- <para>Les champs <code>Keyword</code> (mot-clé) sont stockés ET indexés. Cela signifie qu'ils peuvent
- être aussi bien cherchés dans l'index qu'affichés dans les résultats de la recherche. Ils ne sont pas
- divisés en plusieurs mots par "tokenization". Les champs d'énumérations dans une base de donnée se
- transposent généralement assez bien en champs de type Keyword dans
- <classname>Zend_Search_Lucene</classname>.</para>
- </listitem>
- <listitem>
- <para>Les champs <code>UnIndexed</code> (non-indexé) ne peuvent pas être utilisés dans la recherche. En
- revanche, ils peuvent être retournés dans les résultats. Des timestamps de base de données, des clés
- primaires, des chemins de fichiers et d'autres identifiants externes sont autant de bons exemples
- d'utilisation des champs de type UnIndexed.</para>
- </listitem>
- <listitem>
- <para>Les champs <code>Binary</code> (binaire) ne sont ni "tokenizés", ni indexés, mais ils sont stockés
- dans le but d'être retournés dans les résultats de recherche. Ils peuvent être utilisés pour stocker
- n'importe quelle donnée encodée en chaîne binaire, telle qu'une icône par exemple.</para>
- </listitem>
- <listitem>
- <para>Les champs <code>Text</code> (texte) sont stockés, indexés et "tokenizés". Les champs de type Text
- sont appropriés pour stocker des informations telles que sujets et titres sur lesquels on veut pouvoir
- effectuer des recherches, mais également les utiliser dans l'affichage des résultats.</para>
- </listitem>
- <listitem>
- <para>Les champs <code>UnStored</code> sont "tokenizés" et indexés, mais pas stockés dans l'index. Il
- est recommandé d'utiliser ce type de champ pour indexer les textes conséquents. Stocker des données
- implique la création d'index plus volumineux sur le disque. Donc si vous disposez de données sur
- lesquelles vous voulez uniquement effectuer des recherches sans nécessairement afficher ces données dans
- les résultats, utilisez un champ de type UnStored. Le type UnStored est pratique lorsque vous utilisez
- un index Zend_Search_Lucene en combinaison avec une base de données relationnelle. Vous pouvez indexer
- des gros champs de données dans des champs de type UnStored et les extraire de la base de données
- relationnelle en utilisant un champ séparé en tant qu'identifiant.</para>
- <table id="zend.search.lucene.index-creation.understanding-field-types.table">
- <title>Les types Zend_Search_Lucene_Field</title>
- <tgroup cols="5">
- <thead>
- <row>
- <entry>Type de champ</entry>
- <entry>Stocké</entry>
- <entry>Indexé</entry>
- <entry>"Tokenizé"</entry>
- <entry>Binaire</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>Keyword</entry>
- <entry>Oui</entry>
- <entry>Oui</entry>
- <entry>Non</entry>
- <entry>Non</entry>
- </row>
- <row>
- <entry>UnIndexed</entry>
- <entry>Oui</entry>
- <entry>Non</entry>
- <entry>Non</entry>
- <entry>Non</entry>
- </row>
- <row>
- <entry>Binary</entry>
- <entry>Oui</entry>
- <entry>Non</entry>
- <entry>Non</entry>
- <entry>Oui</entry>
- </row>
- <row>
- <entry>Text</entry>
- <entry>Oui</entry>
- <entry>Oui</entry>
- <entry>Oui</entry>
- <entry>Non</entry>
- </row>
- <row>
- <entry>UnStored</entry>
- <entry>Non</entry>
- <entry>Oui</entry>
- <entry>Oui</entry>
- <entry>Non</entry>
- </row>
- </tbody>
- </tgroup>
- </table>
- </listitem>
- </itemizedlist>
- </sect2>
- <sect2 id="zend.search.lucene.index-creation.html-documents">
- <title>Documents HTML</title>
- <para><classname>Zend_Search_Lucene</classname> offre une fonctionnalité d'analyse HTML. Les documents peuvent être créés
- directement à d'un fichier ou d'une chaîne HTML : <programlisting role="php"><![CDATA[
- $doc = Zend_Search_Lucene_Document_Html::loadHTMLFile($filename);
- $index->addDocument($doc);
- ...
- $doc = Zend_Search_Lucene_Document_Html::loadHTML($htmlString);
- $index->addDocument($doc);
- ]]></programlisting></para>
- <para>La classe <classname>Zend_Search_Lucene_Document_Html</classname> utilise les méthodes
- <code>DOMDocument::loadHTML()</code> et <code>DOMDocument::loadHTMLFile()</code> pour analyser la source HTML,
- ainsi il n'est pas nécessaire que le HTML soit bien formé ou au format XHTML. Par contre, ces méthodes prennent
- en compte l'encodage spécifié dans la balise méta "http-equiv".</para>
- <para>La classe <classname>Zend_Search_Lucene_Document_Html</classname> reconnaît le titre d'une page HTML, son corps
- ("body"), ainsi que les métadonnées de son entête.</para>
- <para>Le champ "title" correspond au contenu de la balise /html/head/title. Il est stocké dans l'index,
- "tokenizé" et disponible pour la recherche.</para>
- <para>Le champ "body" correspond au contenu de la balise "body" du fichier ou de la chaîne HTML. Il ne prend pas
- en compte les scripts, les commentaires ou les attributs.</para>
- <para>Les méthodes <code>loadHTML()</code> et <code>loadHTMLFile()</code> de la classe
- <classname>Zend_Search_Lucene_Document_Html</classname> possèdent également un deuxième argument optionnel. Si sa valeur
- est true, le body sera alors stocké dans l'index et pourra être retourné dans les résultats de recherche. Par
- défaut, le body est "tokenizé", indexé, mais pas stocké.</para>
- <para>Les autres métadonnées génèrent des champs additionnels dans le document. Le champ "name" prend sa valeur
- dans l'attribut "name" de la métadonnées. Le champ "value" prend sa valeur dans l'attribut "content" de la
- métadonnées. Ces deux champs sont "tokenizés", indexés et stockés. Ainsi les documents peuvent être cherchés à
- travers leurs métadonnées (p. ex. par mots-clés).</para>
- <para>Les documents analysés peuvent être enrichis par le programmeur avec d'autres champs : <programlisting
- role="php"><![CDATA[
- $doc = Zend_Search_Lucene_Document_Html::loadHTML($htmlString);
- $doc->addField(Zend_Search_Lucene_Field::UnIndexed('created',
- time()));
- $doc->addField(Zend_Search_Lucene_Field::UnIndexed('updated',
- time()));
- $doc->addField(Zend_Search_Lucene_Field::Text('annotation',
- 'Document annotation text'));
- $index->addDocument($doc);
- ]]></programlisting></para>
- <para>Les liens des documents ne sont pas inclus dans le document généré, mais ils peuvent être récupérés avec
- les méthodes <classname>Zend_Search_Lucene_Document_Html::getLinks()</classname> et
- <classname>Zend_Search_Lucene_Document_Html::getHeaderLinks()</classname> : <programlisting role="php"><![CDATA[
- $doc = Zend_Search_Lucene_Document_Html::loadHTML($htmlString);
- $linksArray = $doc->getLinks();
- $headerLinksArray = $doc->getHeaderLinks();
- ]]></programlisting></para>
- <para>A partir de Zend Framework 1.6, il est également possible d'exclure les balises "link" dont l'attribut
- <code>rel</code> vaut <code>'nofollow'</code>. Utilisez
- <classname>Zend_Search_Lucene_Document_Html::setExcludeNoFollowLinks($true)</classname> pour activer cette option.</para>
- <para>La méthode <classname>Zend_Search_Lucene_Document_Html::getExcludeNoFollowLinks()</classname> retourne la valeur
- courante du flag "Exclude nofollow links".</para>
- </sect2>
- <sect2 id="zend.search.lucene.index-creation.docx-documents">
- <title>Documents Word 2007</title>
- <para><classname>Zend_Search_Lucene</classname> offre une fonctionnalité d'analyse de documents Word 2007. On peut créer
- directement un document depuis un fichier Word 2007 : <programlisting role="php"><![CDATA[
- $doc = Zend_Search_Lucene_Document_Docx::loadDocxFile($filename);
- $index->addDocument($doc);
- ]]></programlisting></para>
- <para>La classe <classname>Zend_Search_Lucene_Document_Docx</classname> utilise la classe <code>ZipArchive</code> et les
- méthodes de <code>simplexml</code> pour analyser le document source. Si la classe <code>ZipArchive</code> (issue
- du module php_zip) n'est pas disponible, <classname>Zend_Search_Lucene_Document_Docx</classname> ne sera pas non plus
- disponible dans le Zend Framework.</para>
- <para>La classe <classname>Zend_Search_Lucene_Document_Docx</classname> reconnaît les métadonnées et le texte des
- documents. Les métadonnées sont constituées, suivant le contenu du document, du nom de fichier (filename), sujet
- (subject), créateur (creator), mots-clés (keywords), description, auteur de la dernière modification
- (lastModifiedBy), révision (revision), date de modification (modified), date de création (created).</para>
- <para>Le champ "filename" correspond au nom du fichier Word 2007.</para>
- <para>Le champ "title" correspond au titre du document.</para>
- <para>Le champ "subject" correspond au sujet du document.</para>
- <para>Le champ "creator" correspond à l'auteur du document.</para>
- <para>Le champ "keywords" contient les mots-clés du document.</para>
- <para>Le champ "description" correspond à la description du document.</para>
- <para>Le champ "lastModifiedBy" correspond au nom de l'utilisateur qui a modifié en dernier le document.</para>
- <para>Le champ "revision" correspond au numéro actuel de la version du document.</para>
- <para>Le champ "modified" contient la date de dernière modification du document.</para>
- <para>Le champ "created" contient la date de création du document.</para>
- <para>Le champ "body" contient le véritable contenu du document Word 2007. Il n'inclut que le texte normal. Les
- commentaires et révisions ne sont pas inclus.</para>
- <para>La méthode <code>loadDocxFile()</code> de la classe <classname>Zend_Search_Lucene_Document_Docx</classname> possède
- également un second argument optionnel. S'il est défini à <code>true</code>, le champ "body" sera alors
- également stocké dans l'index et pourra être affiché dans les résultats de recherche. Par défaut, le champ
- "body" est "tokenizé" et indexé, mais pas stocké.</para>
- <para>Les documents parsés peuvent être étendus par le programmeur avec d'autres champs : <programlisting
- role="php"><![CDATA[
- $doc = Zend_Search_Lucene_Document_Docx::loadDocxFile($filename);
- $doc->addField(Zend_Search_Lucene_Field::UnIndexed(
- 'indexTime',
- time())
- );
- $doc->addField(Zend_Search_Lucene_Field::Text(
- 'annotation',
- 'Document annotation text')
- );
- $index->addDocument($doc);
- ]]></programlisting></para>
- </sect2>
- <sect2 id="zend.search.lucene.index-creation.pptx-documents">
- <title>Document Powerpoint 2007</title>
- <para><classname>Zend_Search_Lucene</classname> offre une fonctionnalité d'analyse de documents Powerpoint 2007. On peut
- créer directement un document depuis un fichier Powerpoint 2007 : <programlisting role="php"><![CDATA[
- $doc = Zend_Search_Lucene_Document_Pptx::loadPptxFile($filename);
- $index->addDocument($doc);
- ]]></programlisting></para>
- <para>La classe <classname>Zend_Search_Lucene_Document_Pptx</classname> utilise la classe <code>ZipArchive</code> et les
- méthodes de <code>simplexml</code> pour analyser le document source. Si la classe <code>ZipArchive</code> (issue
- du module php_zip) n'est pas disponible, <classname>Zend_Search_Lucene_Document_Pptx</classname> ne sera pas non plus
- disponible dans le Zend Framework.</para>
- <para>La classe <classname>Zend_Search_Lucene_Document_Pptx</classname> reconnaît les métadonnées et le texte des
- documents. Les métadonnées sont constituées, suivant le contenu du document, du nom de fichier (filename), sujet
- (subject), créateur (creator), mots-clés (keywords), description, auteur de la dernière modification
- (lastModifiedBy), révision (revision), date de modification (modified), date de création (created).</para>
- <para>Le champ "filename" correspond au nom du fichier Powerpoint 2007.</para>
- <para>Le champ "title" correspond au titre du document.</para>
- <para>Le champ "subject" correspond au sujet du document.</para>
- <para>Le champ "creator" correspond à l'auteur du document.</para>
- <para>Le champ "keywords" contient les mots-clés du document.</para>
- <para>Le champ "description" correspond à la description du document.</para>
- <para>Le champ "lastModifiedBy" correspond au nom de l'utilisateur qui a modifié en dernier le document.</para>
- <para>Le champ "revision" correspond au numéro actuel de la version du document.</para>
- <para>Le champ "modified" contient la date de dernière modification du document.</para>
- <para>Le champ "created" contient la date de création du document.</para>
- <para>Le champ "body" contient le véritable contenu de toutes les slides, ainsi que les notes dans le document
- Powerpoint 2007.</para>
- <para>La méthode <code>loadPptxFile()</code> de la classe <classname>Zend_Search_Lucene_Document_Pptx</classname> possède
- également un second argument optionnel. S'il est défini à true, le champ "body" sera alors également stocké dans
- l'index et pourra être affiché dans les résultats de recherche. Par défaut, le champ "body" est "tokenizé" et
- indexé, mais pas stocké.</para>
- <para>Les documents analysés peuvent être étendus par le programmeur avec d'autres champs : <programlisting
- role="php"><![CDATA[
- $doc = Zend_Search_Lucene_Document_Pptx::loadPptxFile($filename);
- $doc->addField(Zend_Search_Lucene_Field::UnIndexed(
- 'indexTime',
- time()));
- $doc->addField(Zend_Search_Lucene_Field::Text(
- 'annotation',
- 'Document annotation text'));
- $index->addDocument($doc);
- ]]></programlisting></para>
- </sect2>
- <sect2 id="zend.search.lucene.index-creation.xlsx-documents">
- <title>Documents Excel 2007</title>
- <para><classname>Zend_Search_Lucene</classname> offre une fonctionnalité d'analyse de documents Excel 2007. On peut créer
- directement un document depuis un fichier Excel 2007 : <programlisting role="php"><![CDATA[
- $doc = Zend_Search_Lucene_Document_Xlsx::loadXlsxFile($filename);
- $index->addDocument($doc);
- ]]></programlisting></para>
- <para>La classe <classname>Zend_Search_Lucene_Document_Xlsx</classname> utilise la classe <code>ZipArchive</code> et les
- méthodes de <code>simplexml</code> pour analyser le document source. Si la classe <code>ZipArchive</code> (issue
- du module php_zip) n'est pas disponible, <classname>Zend_Search_Lucene_Document_Xlsx</classname> ne sera pas non plus
- disponible dans le Zend Framework.</para>
- <para>La classe <classname>Zend_Search_Lucene_Document_Xlsx</classname> reconnaît les métadonnées et le texte des
- documents. Les métadonnées sont constituées, suivant le contenu du document, du nom de fichier (filename), sujet
- (subject), créateur (creator), mots-clés (keywords), description, auteur de la dernière modification
- (lastModifiedBy), révision (revision), date de modification (modified), date de création (created).</para>
- <para>Le champ "filename" correspond au nom du fichier Excel 2007.</para>
- <para>Le champ "title" correspond au titre du document.</para>
- <para>Le champ "subject" correspond au sujet du document.</para>
- <para>Le champ "creator" correspond à l'auteur du document.</para>
- <para>Le champ "keywords" contient les mots-clés du document.</para>
- <para>Le champ "description" correspond à la description du document.</para>
- <para>Le champ "lastModifiedBy" correspond au nom de l'utilisateur qui a modifié en dernier le document.</para>
- <para>Le champ "revision" correspond au numéro actuel de la version du document.</para>
- <para>Le champ "modified" contient la date de dernière modification du document.</para>
- <para>Le champ "created" contient la date de création du document.</para>
- <para>Le champ "body" contient le véritable contenu de toutes les cellules de toutes les feuilles de calcul du
- document Excel 2007.</para>
- <para>La méthode <code>loadXlsxFile()</code> de la classe <classname>Zend_Search_Lucene_Document_Xlsx</classname> possède
- également un second argument optionnel. S'il est défini à true, le champ "body" sera alors également stocké dans
- l'index et pourra être affiché dans les résultats de recherche. Par défaut, le champ "body" est "tokenizé" et
- indexé, mais pas stocké.</para>
- <para>Les documents analysés peuvent être étendus par le programmeur avec d'autres champs : <programlisting
- role="php"><![CDATA[
- $doc = Zend_Search_Lucene_Document_Xlsx::loadXlsxFile($filename);
- $doc->addField(Zend_Search_Lucene_Field::UnIndexed(
- 'indexTime',
- time()));
- $doc->addField(Zend_Search_Lucene_Field::Text(
- 'annotation',
- 'Document annotation text'));
- $index->addDocument($doc);
- ]]></programlisting></para>
- </sect2>
- </sect1>
|