Changeset 841

Show
Ignore:
Timestamp:
12/10/07 18:11:39 (1 year ago)
Author:
gleu
Message:

Relecture complet du chapitre sur la recherche plein texte.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • traduc/trunk/manuel/textsearch.xml

    r838 r841  
    1717  <para> 
    1818   La recherche plein texte (ou plus simplement la <firstterm>recherche de 
    19    texte</firstterm>) fournit la capacité d'identifier des 
     19   texte</firstterm>) permet de sélectionner des 
    2020   <firstterm>documents</firstterm> en langage naturel qui satisfont une 
    2121   <firstterm>requête</firstterm> et, en option, de les trier par intérêt 
    22    suivant la requête.  Le type le plus fréquent de recherche concerne la 
     22   suivant cette requête.  Le type le plus fréquent de recherche concerne la 
    2323   récupération de tous les documents contenant les <firstterm>termes de 
    2424   recherche</firstterm> indiqués et de les renvoyer dans un ordre dépendant 
    25    de leur <firstterm>similarité</firstterm> à la requête. Les notions de 
     25   de leur <firstterm>similarité</firstterm> par rapport à la requête. Les 
     26   notions de 
    2627   <varname>requête</varname> et de <varname>similarité</varname> peuvent 
    2728   beaucoup variées et dépendent de l'application réelle. La recherche 
     
    3233 
    3334  <para> 
    34    Les opérateurs de recherche plein texte ont existé depuis longtemps dans 
     35   Les opérateurs de recherche plein texte existent depuis longtemps dans 
    3536   les bases de données. <productname>PostgreSQL</productname> dispose des 
    3637   opérateurs <literal>~</literal>, <literal>~*</literal>, 
     
    4546     Aucun support linguistique, même pour l'anglais. Les expressions 
    4647     rationnelles ne sont pas suffisantes car elles ne peuvent pas gérer 
    47      facilement les mots dérivées, par exemple <literal>satisfait</literal> et <literal>satisfaire</literal>. Vous pouvez laisser passer des documents 
     48     facilement les mots dérivées, par exemple <literal>satisfait</literal> et 
     49     <literal>satisfaire</literal>. Vous pouvez laisser passer des documents 
    4850     qui contiennent <literal>satisfait</literal> bien que vous souhaiteriez 
    49      quand même les trouver avec une recherche de <literal>satisfaire</literal>. 
     51     quand même les trouver avec une recherche sur 
     52     <literal>satisfaire</literal>. 
    5053     Il est possible d'utiliser <literal>OR</literal> pour rechercher plusieurs 
    51      formes dérivées mais cela devient complexe et facilite les erreurs 
    52      (certains mots peuvent avoir des centaines de variations). 
     54     formes dérivées mais cela devient complexe et augmente le risque d'erreur 
     55     (certains mots peuvent avoir des centaines de variantes). 
    5356    </para> 
    5457   </listitem> 
     
    7275  <para> 
    7376   L'indexage pour la recherche plein texte permet au document d'être 
    74    <emphasis>pré-traités</emphasis> et qu'un index soit sauvegardé pour une 
    75    recherche ultérieure plus rapide. Le pré-traitement inclut&nbsp;: 
     77   <emphasis>pré-traité</emphasis> et qu'un index de ce pré-traitement soit 
     78   sauvegardé pour une recherche ultérieure plus rapide. Le pré-traitement 
     79   inclut&nbsp;: 
    7680  </para> 
    7781 
     
    103107     besoin de saisir toutes les variantes possibles. De plus, cette étape 
    104108     Ã©limine typiquement les <firstterm>termes courants</firstterm>, qui sont 
    105      des mots si courants qu'il est inutile de les rechercher. (Donc, les 
     109     des mots si courants qu'il est inutile de les rechercher. Donc, les 
    106110     jetons sont des fragments bruts du document alors que les lexemes sont des 
    107      mots supposés utiles pour l'indexage et la recherche.) 
     111     mots supposés utiles pour l'indexage et la recherche. 
    108112     <productname>PostgreSQL</productname> utilise des 
    109113     <firstterm>dictionnaires</firstterm> pour réaliser cette étape. 
     
    116120    <para> 
    117121     <emphasis>Stockage des documents pré-traités pour optimiser la recherche 
    118      </emphasis>. Par exemple, chaque document peut être représenté comme un 
     122     </emphasis>. Chaque document peut être représenté comme un 
    119123     tableau trié de lexemes normalisés. Avec ces lexemes, il est souvent 
    120124     souhaitable de stocker des informations de position à utiliser pour 
     
    147151   <listitem> 
    148152    <para> 
    149      Ã‰tablir une correspondances entre des phrases et un simple mot en utilisant 
     153     Ã‰tablir une correspondance entre des phrases et un simple mot en utilisant 
    150154     un thésaurus. 
    151155    </para> 
     
    154158   <listitem> 
    155159    <para> 
    156      Ã‰tablir une correspondances entre différentes variations d'un mot et une 
     160     Ã‰tablir une correspondance entre différentes variations d'un mot et une 
    157161     forme canonique en utilisant un dictionnaire <application>Ispell</application>. 
    158162    </para> 
     
    170174  <para> 
    171175   Un type de données <type>tsvector</type> est fourni pour stocker les documents 
    172    pré-traités, avec un type <type>tsquery</type> pour réprésenter les requêtes 
     176   pré-traités, avec un type <type>tsquery</type> pour représenter les requêtes 
    173177   traitées (<xref linkend="datatype-textsearch"/>). Il existe beaucoup de 
    174178   fonctions et d'opérateurs disponibles pour ces types de données 
    175179   (<xref linkend="functions-textsearch"/>), le plus important étant l'opérateur 
    176    de correspondance, <literal>@@</literal>, dont nous parlons dans 
     180   de correspondance <literal>@@</literal>, dont nous parlons dans la 
    177181   <xref linkend="textsearch-matching"/>. Les recherches plein texte peuvent 
    178    Ãªtre accélérées en utilisant des index (<xref linkend="textsearch-indexes"/>). 
     182   Ãªtre accélérées en utilisant des index (<xref 
     183   linkend="textsearch-indexes"/>). 
    179184  </para> 
    180185 
     
    190195   <para> 
    191196    Un <firstterm>document</firstterm> est l'unité de recherche dans un systÚme 
    192     de recherche plein texte&nbsp;; par exemple un article de magazine ou un 
    193     message email. Le moteur de la recherche plein texte doit être capable 
     197    de recherche plein texte, par exemple un article de magazine ou un 
     198    message email. Le moteur de recherche plein texte doit être capable 
    194199    d'analyser des documents et de stocker les associations de lexemes (mots 
    195200    clés) avec les documents parents. Ensuite, ces associations seront utilisées 
     
    227232   <para> 
    228233    Une autre possibilité est de stocker les documents dans de simples fichiers 
    229     texte du systÚme de fichier. Dans ce cas, la base doit être utilisée pour 
     234    texte du systÚme de fichiers. Dans ce cas, la base est utilisée pour 
    230235    stocker l'index de recherche plein texte et pour exécuter les recherches, et 
    231     un identifiant unique peut être utilisé pour retrouver le document sur le 
     236    un identifiant unique est utilisé pour retrouver le document sur le 
    232237    systÚme de fichiers. Néanmoins, retrouver les fichiers en dehors de la base 
    233238    demande les droits d'un superutilisateur ou le support de fonctions spéciales, 
     
    240245   <para> 
    241246    Dans le but de la recherche plein texte, chaque document doit être réduit 
    242     au format de pré-traitement, <type>tsvector</type>. La recherche et le score 
    243     sont réalisés entiÚrement à partir de la représentation <type>tsvector</type> 
     247    au format de pré-traitement, <type>tsvector</type>. La recherche et le 
     248    calcul du score sont réalisés entiÚrement à partir de la représentation 
     249    <type>tsvector</type> 
    244250    d'un document &mdash; le texte original n'a besoin d'être retrouvé que 
    245     lorsque le document a été sélectionné pour être montrer à l'utilisateur. 
     251    lorsque le document a été sélectionné pour être montré à l'utilisateur. 
    246252    Nous utilisons souvent <type>tsvector</type> pour le document mais, bien 
    247253    sûr, il ne s'agit que d'une représentation compacte du document complet. 
     
    277283    <type>tsquery</type> contient des termes de recherche qui doivent déjà être 
    278284    des lexemes normalisés, et peut combiner plusieurs termes en utilisant les 
    279     opérateurs AND, OR et NOT. (Pour les détails, voir <xref 
     285    opérateurs AND, OR et NOT. (Pour les détails, voir la <xref 
    280286    linkend="datatype-textsearch"/>.)  Les fonctions <function>to_tsquery</function> 
    281287    et <function>plainto_tsquery</function> sont utiles pour convertir un texte 
     
    284290    <function>to_tsvector</function> est utilisé pour analyser et normaliser un 
    285291    document. Donc, en pratique, une correspondance de recherche ressemblerait 
    286     plus à ceci&nbsp;: 
     292    plutÃŽt à ceci&nbsp;: 
    287293 
    288294<programlisting> 
     
    293299</programlisting> 
    294300 
    295     Observez que cette correspondance ne réussira pas si elle est écrite 
     301    Observez que cette correspondance ne réussit pas si elle est écrite 
    296302    ainsi&nbsp;: 
    297303 
     
    324330 
    325331   <para> 
    326     La premiÚre des deux que nous avons déjà vu. La forme 
     332    Nous avons déjà vu les deux premiÚres. La forme 
    327333    <type>text</type> <literal>@@</literal> <type>tsquery</type> est 
    328334    équivalent à <literal>to_tsvector(x) @@ y</literal>. 
     
    352358    Lors de l'installation, une configuration appropriée est sélectionnée et 
    353359    <xref linkend="guc-default-text-search-config"/> est configuré dans 
    354     <filename>postgresql.conf</filename> pour l'utiliser par défaut. Si vous 
    355     utilisez la même configuration de recherche plein texte pour le cluster 
    356     entier, vous pouvez utiliser la valeur de 
     360    <filename>postgresql.conf</filename> pour qu'elle soit utilisée par défaut. 
     361    Si vous utilisez la même configuration de recherche plein texte pour le 
     362    cluster entier, vous pouvez utiliser la valeur de 
    357363    <filename>postgresql.conf</filename>. Pour utiliser différentes configurations 
    358364    dans le cluster mais avec la même configuration pour une base, utilisez 
     
    364370    Chaque fonction de recherche plein texte qui dépend d'une configuration a 
    365371    un argument <type>regconfig</type> en option, pour que la configuration 
    366     utilisée puisse être indiquée explicitement. 
     372    utilisée puisse être précisée explicitement. 
    367373    <varname>default_text_search_config</varname> est seulement utilisé quand 
    368374    cet argument est omis. 
     
    371377   <para> 
    372378    Pour rendre plus facile la construction de configurations de recherche 
    373     plein texte, une configuration est construite à partir d'objets simples 
    374     de base de données. La recherche plein texte de 
     379    plein texte, une configuration est construite à partir d'objets de la 
     380    base de données. La recherche plein texte de 
    375381    <productname>PostgreSQL</productname> fournit quatre types d'objets 
    376382    relatifs à la configuration&nbsp;: 
     
    444450   <para> 
    445451    Il est possible de faire des recherches plein texte sans index. Une requête 
    446     qui ne fait qu'afficher le <structname>title</structname> de chaque lign
    447     contenant le mot <literal>friend</literal> dans son champ 
     452    qui ne fait qu'afficher le champ <structname>title</structname> de chaqu
     453    ligne contenant le mot <literal>friend</literal> dans son champ 
    448454    <structfield>body</structfield> ressemble à ceci&nbsp;: 
    449455 
     
    454460</programlisting> 
    455461 
    456     Ceci trouvera aussi les mots relatifs comme <literal>friends</literal> 
     462    Ceci trouve aussi les mots relatifs comme <literal>friends</literal> 
    457463    et <literal>friendly</literal> car ils ont tous la même racine, le même 
    458464    lexeme normalisé. 
     
    460466 
    461467   <para> 
    462     La requête ci-dessus spécifie que la configuration <literal>english</literal> 
    463     doit être utilisée pour analyser et normaliser les chaînes. Nous pouvions 
    464     aussi omettre les paramÚtres de configuration&nbsp;: 
     468    La requête ci-dessus spécifie que la configuration 
     469    <literal>english</literal> doit être utilisée pour analyser et normaliser 
     470    les chaînes. Nous pouvons aussi omettre les paramÚtres de 
     471    configuration&nbsp;: 
    465472 
    466473<programlisting> 
     
    470477</programlisting> 
    471478 
    472     Cette requête utilisera l'ensemble de configuration indiqué <xref 
     479    Cette requête utilisera l'ensemble de configuration indiqué par <xref 
    473480    linkend="guc-default-text-search-config"/>. 
    474481   </para> 
     
    493500 
    494501   <para> 
    495     Bien que ces requêtes fonctionneront sans index, la plupart des applications 
    496     trouveront cette approche trop lente, sauf peut-être pour des recherches 
     502    Bien que ces requêtes fonctionnent sans index, la plupart des applications 
     503    trouvent cette approche trop lente, sauf peut-être pour des recherches 
    497504    occasionnelles. Une utilisation pratique de la recherche plein texte réclame 
    498505    habituellement la création d'un index. 
     
    515522    Notez que la version à deux arguments de <function>to_tsvector</function> 
    516523    est utilisée. Seules les fonctions de recherche plein texte qui spécifient 
    517     un nom de configuration peut être utilisé dans les index sur des expressions 
     524    un nom de configuration peuvent être utilisées dans les index sur des 
     525    expressions 
    518526    (<xref linkend="indexes-expressional"/>). Ceci est dû au fait que le contenu 
    519527    de l'index ne doit pas être affecté par <xref 
    520528    linkend="guc-default-text-search-config"/>. Dans le cas contraire, le 
    521     contenu de l'index pourrait être incohérent parce que différentes entrées 
     529    contenu de l'index peut devenir incohérent parce que différentes entrées 
    522530    pourraient contenir des <type>tsvector</type> créés avec différentes 
    523531    configurations de recherche plein texte et qu'il ne serait plus possible de 
     
    530538    été utilisée dans l'index ci-dessus, seule une référence de la requête 
    531539    qui utilise la version à deux arguments de <function>to_tsvector</function> 
    532     avec le même nom de configuration utilisera cet index. C'est-à-dire que 
     540    avec le même nom de configuration utilise cet index. C'est-à-dire que 
    533541    <literal>WHERE to_tsvector('english', body) @@ 'a &amp; b'</literal> peut 
    534542    utiliser l'index, mais <literal>WHERE to_tsvector(body) @@ 'a &amp; b'</literal> 
    535     ne le peut pas. Ceci nous assure qu'un index sera seulement utilisé avec la 
     543    ne le peut pas. Ceci nous assure qu'un index est seulement utilisé avec la 
    536544    même configuration que celle utilisée pour créer les entrées de l'index. 
    537545   </para> 
    538546 
    539547  <para> 
    540     Il est possible de configurer des index avec expression plus complexes 
    541     où le nom de configuration est indiqué dans une autre colonne. Par 
     548    Il est possible de configurer des index avec des expressions plus complexes 
     549    où le nom de la configuration est indiqué dans une autre colonne. Par 
    542550    exemple&nbsp;: 
    543551 
     
    549557    <literal>pgweb</literal>. Ceci permet l'utilisation de configuration 
    550558    mixe dans le même index tout en enregistrant la configuration utilisée 
    551     pour chaque entrée d'index. Ceci est utile dans la cas d'une bibliothÚque 
     559    pour chaque entrée d'index. Ceci est utile dans le cas d'une bibliothÚque 
    552560    de documents dans différentes langues. Encore une fois, les requêtes 
    553561    voulant utiliser l'index doivent être écrites pour correspondre à 
     
    565573 
    566574   <para> 
    567     Une autre approche renvient à créer une colonne <type>tsvector</type> 
     575    Une autre approche revient à créer une colonne <type>tsvector</type> 
    568576    séparée pour contenir le résultat de <function>to_tsvector</function>. Cet 
    569577    exemple est une concaténation de <literal>title</literal> et 
    570578    <literal>body</literal>, en utilisant <function>coalesce</function> pour 
    571     s'assurer qu'un champ sera toujours indexé même si l'autre vaut 
     579    s'assurer qu'un champ est toujours indexé même si l'autre vaut 
    572580    <literal>NULL</literal>&nbsp;: 
    573581 
     
    599607    <type>tsvector</type>, il est nécessaire d'ajouter un trigger pour 
    600608    obtenir une colonne <type>tsvector</type> à jour à tout moment suivant les 
    601     modifications de <literal>title</literal> et <literal>body</literal>. 
     609    modifications de <literal>title</literal> et <literal>body</literal>. La 
    602610    <xref linkend="textsearch-update-triggers"/> explique comment le faire. 
    603611   </para> 
     
    610618    de <varname>default_text_search_config</varname>. Un autre avantage est que 
    611619    les recherches seront plus rapides car il n'est plus nécessaire de refaire 
    612     des appels à <function>to_tsvector</function> pour vérifier la correspondance 
    613     de l'index. (Ceci est plus important lors de l'utilisation d'un index GiST 
    614     par rapport à un index GIN&nbsp;; voir <xref linkend="textsearch-indexes"/>.) 
     620    des appels à <function>to_tsvector</function> pour vérifier la 
     621    correspondance de l'index. (Ceci est plus important lors de l'utilisation 
     622    d'un index GiST par rapport à un index GIN&nbsp;; voir la <xref 
     623    linkend="textsearch-indexes"/>.) 
    615624    Néanmoins, l'approche de l'index par expression est plus simple à 
    616625    configurer et elle réclame moins d'espace disque car la représentation 
     
    658667    <type>tsvector</type> qui liste les lexemes avec leur position dans le 
    659668    document. Ce dernier est traité suivant la configuration de recherche 
    660     plein texte spécifié ou celle par défaut. Voici un exemple simple&nbsp;: 
     669    plein texte spécifiée ou celle par défaut. Voici un exemple simple&nbsp;: 
    661670 
    662671<programlisting> 
     
    692701    aucun dictionnaire de la liste ne reconnaît le jeton, il est aussi ignoré. 
    693702    Dans cet exemple, il s'agit du signe de ponctuation <literal>-</literal> 
    694     car il n'existe aucune dictionnaire affecté à ce type de jeton 
     703    car il n'existe aucun dictionnaire affecté à ce type de jeton 
    695704    (<literal>Space symbols</literal>), ce qui signifie que les jetons espace 
    696705    ne seront jamais indexés. Le choix de l'analyseur, des dictionnaires et des 
     
    708717    <firstterm>poids</firstterm> donné. Ce poids consiste en une lettre&nbsp;: 
    709718    <literal>A</literal>, <literal>B</literal>, <literal>C</literal> ou 
    710     <literal>D</literal>. Il est typiquement utilisé pour marquer les entrées 
     719    <literal>D</literal>. Elle est utilisée typiquement pour marquer les entrées 
    711720    provenant de différentes parties d'un document, comme le titre et le corps. 
    712721    Plus tard, cette information peut être utilisée pour modifier le score des 
     
    715724 
    716725   <para> 
    717     Comme <function>to_tsvector</function>(<literal>NULL</literal>) renverra 
     726    Comme <function>to_tsvector</function>(<literal>NULL</literal>) renvoie 
    718727    <literal>NULL</literal>, il est recommandé d'utiliser 
    719     <function>coalesce</function> quand un champ pourrait être NULL. Voici la 
     728    <function>coalesce</function> quand un champ peut être NULL. Voici la 
    720729    méthode recommandée pour créer un <type>tsvector</type> à partir d'un 
    721730    document structuré&nbsp;: 
     
    730739 
    731740    Ici nous avons utilisé <function>setweight</function> pour ajouter un label 
    732     au source de chaque lexeme dans le <type>tsvector</type> final, puis assemblé 
    733     les valeurs <type>tsvector</type> en utilisant l'opérateur de concaténation 
    734     des <type>tsvector</type>, <literal>||</literal>.  (<xref 
    735     linkend="textsearch-manipulate-tsvector"/> donnent des détails sur ces 
     741    au source de chaque lexeme dans le <type>tsvector</type> final, puis 
     742    assemblé les valeurs <type>tsvector</type> en utilisant l'opérateur de 
     743    concaténation des <type>tsvector</type>, <literal>||</literal>.  (La <xref 
     744    linkend="textsearch-manipulate-tsvector"/> donne des détails sur ces 
    736745    opérations.) 
    737746   </para> 
     
    761770   <para> 
    762771    <function>to_tsquery</function> crée une valeur <type>tsquery</type> à 
    763     partir de <replaceable>querytext</replaceable> qui doit consister de jetons 
     772    partir de <replaceable>querytext</replaceable> qui doit contenir un 
     773    ensemble de jetons 
    764774    individuels séparés par les opérateurs booléens <literal>&amp;</literal> 
    765775    (AND), <literal>|</literal> (OR) et <literal>!</literal> (NOT). Ces 
    766776    opérateurs peuvent être groupés en utilisant des parenthÚses. En d'autres 
    767777    termes, les arguments de <function>to_tsquery</function> doivent déjà suivre 
    768     les rÚgles générales pour un <type>tsquery</type> comme décrit dans <xref 
    769     linkend="datatype-textsearch"/>. La différence est que, alors qu'une 
     778    les rÚgles générales pour un <type>tsquery</type> comme décrit dans la <xref 
     779    linkend="datatype-textsearch"/>. La différence est que, alors qu'un 
    770780    <type>tsquery</type> basique prend les jetons bruts, 
    771781    <function>to_tsquery</function> normalise chaque jeton en un lexeme en 
    772     utilisant la configuration spécifiée ou par défaut et annule tout jeton qui 
     782    utilisant la configuration spécifiée ou par défaut, et annule tout jeton qui 
    773783    est un terme courant d'aprÚs la configuration. Par exemple&nbsp;: 
    774784 
     
    780790</programlisting> 
    781791 
    782     Comme une entrée <type>tsquery</type> basique, le(s) poidt(s) peuvent être 
    783     attaché(s) à chaque lexeme à restreindre pour établir une correspondance 
     792    Comme une entrée <type>tsquery</type> basique, des poidts peuvent être 
     793    attachés à chaque lexeme à restreindre pour établir une correspondance 
    784794    avec seulement des lexemes <type>tsvector</type> de ces poids. Par 
    785795    exemple&nbsp;: 
     
    793803 
    794804    <function>to_tsquery</function> peut aussi accepter des phrases avec des 
    795     guillemets simples. C'est utile quand la configuration inclut un dictionnaire 
    796     thésaurus qui pourrait se déclencher sur de telles phrases. Dans l'exemple 
     805    guillemets simples. C'est utile quand la configuration inclut un 
     806    dictionnaire 
     807    thésaurus qui peut se déclencher sur de telles phrases. Dans l'exemple 
    797808    ci-dessous, un thésaurus contient la rÚgle <literal>supernovae 
    798     stars : sn</literal>
     809    stars : sn</literal>&nbsp;
    799810 
    800811<programlisting> 
     
    805816</programlisting> 
    806817 
    807     sans guillemets, <function>to_tsquery</function> générera une erreur de 
     818    sans guillemets, <function>to_tsquery</function> génÚre une erreur de 
    808819    syntaxe pour les jetons qui ne sont pas séparés par un opérateur AND ou OR. 
    809820   </para> 
     
    866877    pourrait demander plus d'informations pour calculer le score, par exemple 
    867878    la date et l'heure de modification du document. Les fonctions internes de 
    868     score sont seulement des exemples. Vous pouvez écrire vos propres fonction
    869     de score et/ou combiner leur résultats avec des facteurs supplémentaire
    870     pour remplir un besoin spécifique. 
     879    calcul de score sont seulement des exemples. Vous pouvez écrire vos propre
     880    fonctions de score et/ou combiner leur résultats avec des facteur
     881    supplémentaires pour remplir un besoin spécifique. 
    871882   </para> 
    872883 
     
    913924        Cette fonction calcule le score de la <firstterm>densité de 
    914925        couverture</firstterm> pour le vecteur du document et la requête donnés, 
    915         comme décrit dans l'article de Clarke, Cormack et Tudhope, "Relevance 
    916         Ranking for One to Three Term Queries", article paru dans le journal 
    917         "Information Processing and Management" en 1999. 
     926        comme décrit dans l'article de Clarke, Cormack et Tudhope, 
     927        <quote>Relevance Ranking for One to Three Term Queries</quote>, article 
     928        paru dans le journal <quote>Information Processing and 
     929        Management</quote> en 1999. 
    918930       </para> 
    919931 
    920932       <para> 
    921933        Cette fonction nécessite des informations de position. Du coup, elle 
    922         ne fonctionnera pas sur des valeurs <type>tsvector</type> 
    923         <quote>strippées</quote> &mdash; elle renverra toujours zéro. 
     934        ne fonctionne pas sur des valeurs <type>tsvector</type> 
     935        <quote>strippées</quote> &mdash; elle renvoie toujours zéro. 
    924936       </para> 
    925937      </listitem> 
     
    948960</programlisting> 
    949961 
    950     Typiquements, les poids sont utilisés pour marquer les mots compris dans 
     962    Typiquement, les poids sont utilisés pour marquer les mots compris dans 
    951963    des aires spéciales du document, comme le titre ou le résumé initial, pour 
    952964    qu'ils puissent être traités avec plus ou moins d'importance que les mots 
     
    11071119   <para> 
    11081120    Si une chaîne <replaceable>options</replaceable> est spécifiée, elle doit 
    1109     consister en une liste de une ou plusieurs pair
     1121    consister en une liste de une ou plusieurs paire
    11101122    <replaceable>option</replaceable><literal>=</literal><replaceable>valeur</replaceable> 
    11111123    séparées par des virgules. Les options disponibles sont&nbsp;: 
     
    12091221 
    12101222   <para> 
    1211     <xref linkend="textsearch-parsing-documents"/> a montré comment des documents 
     1223    La <xref linkend="textsearch-parsing-documents"/> a montré comment des 
     1224    documents 
    12121225    en texte brut peuvent être convertis en valeurs <type>tsvector</type>. 
    12131226    <productname>PostgreSQL</productname> fournit aussi des fonctions et des 
     
    12411254       concaténation des deux documents originaux. (L'équivalence n'est pas 
    12421255       exacte car tout terme courant supprimé de la fin de l'argument gauche 
    1243        n'affectera pas le résultat alors qu'ils auraient affectés les positions 
     1256       n'affectera pas le résultat alors qu'ils auraient affecté les positions 
    12441257       des lexemes dans l'argument droit si la concaténation de texte avait été 
    12451258       utilisée.) 
     
    13431356 
    13441357   <para> 
    1345     <xref linkend="textsearch-parsing-queries"/> a montré comment des requêtes 
     1358    La <xref linkend="textsearch-parsing-queries"/> a montré comment des 
     1359    requêtes 
    13461360    texte peuvent être converties en valeurs de type <type>tsquery</type>. 
    13471361    <productname>PostgreSQL</productname> fournit aussi des fonctions et des 
     
    14151429     <listitem> 
    14161430      <para> 
    1417        Renvoie le nombre de noeuds (lexemes et opérateurs) dans un 
     1431       Renvoie le nombre de nœuds (lexemes et opérateurs) dans un 
    14181432       <type>tsquery</type>. Cette fonction est utile pour déterminer si la 
    14191433       requête (<replaceable>query</replaceable>) a un sens 
     
    14831497     remplace chaque occurrence avec une autre sous-requête de substitution. 
    14841498     En fait, cette opération est une version spécifique à 
    1485      <type>tsquery</type> d'un remplacement de substring. Une combinaison cible 
     1499     <type>tsquery</type> d'un remplacement de sous-chaîne. Une combinaison 
     1500     cible 
    14861501     et substitut peut être vu comme une <firstterm>rÚgle de ré-écriture de la 
    14871502     requête</firstterm>. Un ensemble de rÚgles de ré-écriture peut être une 
     
    15691584 
    15701585    <para> 
    1571      Considérons un exemple réel pour l'astronomie. Nous étendrons la requête 
     1586     Considérons un exemple réel pour l'astronomie. Nous étendons la requête 
    15721587     <literal>supernovae</literal> en utilisant les rÚgles de ré-écriture par 
    15731588     la table&nbsp;: 
     
    16021617     les opérateurs de contenant pour le type <type>tsquery</type>. Dans 
    16031618     l'exemple ci-dessous, nous sélectionnons seulement les rÚgles qui 
    1604      pourraient correspondre avec la requête originale&nbsp;: 
     1619     peuvent correspondre avec la requête originale&nbsp;: 
    16051620 
    16061621<programlisting> 
     
    16301645    trigger pour mettre à jour la colonne <type>tsvector</type> quand le 
    16311646    contenu des colonnes document change. Deux fonctions trigger intégrées 
    1632     sont disponibles pour cela, mais vous pouvez aussi écrire la votre. 
     1647    sont disponibles pour cela, mais vous pouvez aussi écrire la vÃŽtre. 
    16331648   </para> 
    16341649 
     
    16721687    <structfield>title</structfield> ou <structfield>body</structfield> sera 
    16731688    automatiquement reflétée dans <structfield>tsv</structfield>, sans que 
    1674     l'application ait à s'en soucier. 
     1689    l'application n'ait à s'en soucier. 
    16751690   </para> 
    16761691 
     
    16871702    trigger est le nom d'une autre colonne de table qui doit être du type 
    16881703    <type>regconfig</type>. Ceci permet une sélection par ligne de la 
    1689     configuration à faire. Les arguments restant sont les noms des colonnes texte 
    1690     (de type <type>text</type>, <type>varchar</type> ou <type>char</type>). Elles 
    1691     seront inclus dans le document suivant l'ordre donné. Les valeurs NULL seront 
    1692     ignorées (mais les autres colonnes seront toujours indexées). 
     1704    configuration à faire. Les arguments restant sont les noms des colonnes 
     1705    texte (de type <type>text</type>, <type>varchar</type> ou 
     1706    <type>char</type>). Elles sont inclus dans le document suivant l'ordre 
     1707    donné. Les valeurs NULL sont ignorées (mais les autres colonnes sont 
     1708    toujours indexées). 
    16931709   </para> 
    16941710 
     
    18061822   jetons. L'ensemble des types possibles est défini par l'analyseur lui-même. 
    18071823   Notez qu'un analyseur ne modifie pas le texte &mdash; il identifie les 
    1808    limites plausibles des mots. Comme son domain est limité, il est moins 
     1824   limites plausibles des mots. Comme son domaine est limité, il est moins 
    18091825   important de pouvoir construire des analyseurs personnalisés pour une 
    18101826   application. Actuellement, <productname>PostgreSQL</productname> fournit 
     
    18981914     <row> 
    18991915      <entry><literal>url_path</literal></entry> 
    1900       <entry>chemin URL</entry> 
     1916      <entry>Chemin URL</entry> 
    19011917      <entry><literal>/stuff/index.html</literal>, in the context of a URL</entry> 
    19021918     </row> 
     
    20072023   succÚs est appelé un <firstterm>lexeme</firstterm>. En dehors d'améliorer 
    20082024   la qualité de la recherche, la normalisation et la suppression des termes 
    2009    courants réduisent la taille de la représentation en <type>tsvector</type> 
    2010    d'un document, et donc améliorent les performances. La normalisation n'a pas 
    2011    toujours une signification linguistique et dépend habituellement de la 
    2012    sémantique de l'application. 
     2025   courants réduisent la taille de la représentation d'un document en 
     2026   <type>tsvector</type>, et donc améliorent les performances. La 
     2027   normalisation n'a pas toujours une signification linguistique et dépend 
     2028   habituellement de la sémantique de l'application. 
    20132029  </para> 
    20142030 
     
    21152131   liste des dictionnaires est de placer en premier les dictionnaires les plus 
    21162132   précis, les plus spécifiques, puis les dictionnaires généralistes, en 
    2117    finissant abec un dictionnaire le plus général possible, comme par exemple 
     2133   finissant avec un dictionnaire le plus général possible, comme par exemple 
    21182134   un stemmer <application>Snowball</application> ou <literal>simple</literal>, 
    21192135   qui reconnait tout. Par exemple, pour une recherche en astronomie 
     
    22552271   <para> 
    22562272    Avec le paramÚtrage par défaut d'<literal>Accept</literal> (à savoir, 
    2257     <literal>true</literal>), il est juste préférable de placer un dictionnaire 
    2258     <literal>simple</literal> à la fin de la liste des dictionnaires. Sinon, 
     2273    <literal>true</literal>), il est préférable de placer un dictionnaire 
     2274    <literal>simple</literal> à la fin de la liste des dictionnaires. 
    22592275    <literal>Accept</literal> = <literal>false</literal> est seulement utile 
    22602276    quand il y a au moins un dictionnaire aprÚs celui-ci. 
     
    22912307    Ce modÚle de dictionnaire est utilisé pour créer des dictionnaires qui 
    22922308    remplacent un mot par un synonyme. Les phrases ne sont pas supportées 
    2293     (utiliser le modÚle thésaurus pour cela, <xref linkend="textsearch-thesaurus"/>). 
     2309    (utilisez le modÚle thésaurus pour cela, <xref 
     2310    linkend="textsearch-thesaurus"/>). 
    22942311    Un dictionnaire des synonyme peut être utilisé pour contourner des problÚmes 
    22952312    linguistiques, par exemple pour empêcher un dictionnaire stemmer anglais de 
     
    23292346    Le format du fichier est une ligne par mot à substituer, avec le mot suivi 
    23302347    par son synonyme séparé par un espace blanc. Les lignes vierges et les 
    2331     espaces aprÚs les mots sont ignorées, les lettres majuscules sont mises 
     2348    espaces aprÚs les mots sont ignorés, les lettres majuscules sont mises 
    23322349    en minuscules. 
    23332350   </para> 
     
    23402357   <para> 
    23412358    Un dictionnaire thésaurus (parfois abrévié en <acronym>TZ</acronym>) est 
    2342     un ensemble de mots qui inclient des informations sur les relations des 
     2359    un ensemble de mots qui incluent des informations sur les relations des 
    23432360    mots et des phrases, par exemple des termes plus lointains 
    23442361    (<acronym>BT</acronym>), plus proches (<acronym>NT</acronym>), des termes 
     
    23562373 
    23572374<programlisting> 
    2358 # this is a comment 
    2359 sample word(s) : indexed word(s) 
    2360 more sample word(s) : more indexed word(s) 
     2375# ceci est un commentaire 
     2376mots(s) : mot(s) indexé(s) 
     2377d'autre(s) mot(s) : d'autre(s) mot(s) indexé(s) 
    23612378... 
    23622379</programlisting> 
     
    23712388    texte en entrée avant la vérification des correspondances de phrases. Un 
    23722389    seul sous-dictionnaire est sélectionnable. Une erreur est renvoyée si le 
    2373     sous-dictionnaire échoue pour réconnaître un mot. Dans ce cas, vous devez 
     2390    sous-dictionnaire échoue dans la reconnaissance d'un mot. Dans ce cas, vous 
     2391    devez 
    23742392    supprimer l'utilisation du mot ou le faire connaître au sous-dictionnaire. 
    23752393    Vous pouvez placer une astérisque (<symbol>*</symbol>) devant un mot indexé 
     
    24362454</programlisting> 
    24372455 
    2438     Here
     2456    Dans ce cas&nbsp;
    24392457    <itemizedlist  spacing="compact" mark="bullet"> 
    24402458     <listitem> 
     
    24462464      <para> 
    24472465       <literal>mythesaurus</literal> est le nom de base du fichier de 
    2448        configuration du thésaurus. 
    2449        (son nom complet sera 
     2466       configuration du thésaurus. (Son nom complet est 
    24502467       <filename>$SHAREDIR/tsearch_data/mythesaurus.ths</filename>, 
    2451        où <literal>$SHAREDIR</literal> signifie le répertoire des données 
    2452        partagées de l'installation.) 
     2468       où <literal>$SHAREDIR</literal> est remplacé par le répertoire des 
     2469       données partagées de l'installation.) 
    24532470      </para> 
    24542471     </listitem> 
     
    25212538 
    25222539    En principe, il es possible d'utiliser <function>to_tsquery</function> si 
    2523     vous placer l'argument entre guillemets&nbsp;: 
     2540    vous placez l'argument entre guillemets&nbsp;: 
    25242541 
    25252542<programlisting> 
     
    25592576 
    25602577   <para> 
    2561     Le modÚle de dictionnaire <application>Ispell</application> ajoute le support 
     2578    Le modÚle de dictionnaire <application>Ispell</application> ajoute le 
     2579    support 
    25622580    des <firstterm>dictionnaires morphologiques</firstterm> qui peuvent 
    2563     normalisés plusieurs formes linguisitiques différentes d'un mot en un même 
     2581    normaliser plusieurs formes linguisitiques différentes d'un mot en un même 
    25642582    lexeme. Par exemple, un dictionnaire <application>Ispell</application> 
    25652583    anglais peut établir une correspondance avec toutes les déclinaisons et 
    25662584    conjugaisons du terme <literal>bank</literal>, c'est-à-dire 
    2567     <literal>banking</literal>, <literal>banked</literal>, <literal>banks</literal>, 
     2585    <literal>banking</literal>, <literal>banked</literal>, 
     2586    <literal>banks</literal>, 
    25682587    <literal>banks'</literal> et <literal>bank's</literal>. 
    25692588   </para> 
     
    26522671   <para> 
    26532672    Le modÚle de dictionnaire <application>Snowball</application> est basé sur 
    2654     le projet de Martin Porter, inventeur de du populaire algorithme stemming de 
     2673    le projet de Martin Porter, inventeur du populaire algorithme stemming de 
    26552674    Porter pour l'anglais. Snowball propose maintenant des algorithmes stemming 
    2656     pour de nombreuses langues (voir le <ulink 
     2675    pour un grand nombre de langues (voir le <ulink 
    26572676    url="http://snowball.tartarus.org">site Snowball</ulink> pour plus 
    26582677    d'informations). Chaque algorithme sait comment réduire les variantes 
    2659     standard de mot vers une base, ou stem, en rapport avec la langue. Un 
     2678    standard d'un mot vers une base, ou stem, en rapport avec la langue. Un 
    26602679    dictionnaire Snowball réclame un paramÚtre <literal>langue</literal> pour 
    2661     identifie le stemmer à utiliser et, en option, un nom de fichier des 
     2680    identifier le stemmer à utiliser et, en option, un nom de fichier des 
    26622681    <literal>termes courants</literal> donnant une liste de mots à éliminer. 
    2663     (les listes de termes courants au standard <productname>PostgreSQL</productname> 
     2682    (Les listes de termes courants au standard 
     2683    <productname>PostgreSQL</productname> 
    26642684    sont aussi fournies par le projet Snowball.) Par exemple, il existe un 
    26652685    équivalent de la définition interne en 
     
    27452765 
    27462766    Ensuite, nous enregistrons le dictionnaire <productname>Ispell</productname> 
    2747     <literal>english_ispell</literal>, qui a ses propres fichiers de 
     2767    <literal>english_ispell</literal> qui a ses propres fichiers de 
    27482768    configuration&nbsp;: 
    27492769 
     
    28172837  <para> 
    28182838   Le comportement d'une configuration personnalisée de recherche plein texte 
    2819    peut facilement devenir suffisament compliqué pour être confuse ou 
     2839   peut facilement devenir suffisamment compliqué pour être confuse ou 
    28202840   indésirable. Les fonctions décrites dans cette section sont utiles pour 
    28212841   tester les objets de recherche plein texte. Vous pouvez tester une 
    2822    configuration complÚte ou pour tester séparément analyseurs et 
    2823    dictionnaires. 
     2842   configuration complÚte ou tester séparément analyseurs et dictionnaires. 
    28242843  </para> 
    28252844 
     
    29722991   <literal>asciiword</literal>). Pour ce type de jeton, la liste de dictionnaire 
    29732992   est <literal>english_ispell</literal> et <literal>english_stem</literal>. Le 
    2974    mot a été reconnu par <literal>english_ispell</literal>, qui l'a réduit par 
    2975    le nom <literal>bright</literal>. Le mot <literal>supernovaes</literal> est 
    2976    inconnu dans le dictionnaire <literal>english_ispell</literal> dont il 
     2993   mot a été reconnu par <literal>english_ispell</literal>, qui l'a réduit avec 
     2994   le mot <literal>bright</literal>. Le mot <literal>supernovaes</literal> est 
     2995   inconnu dans le dictionnaire <literal>english_ispell</literal> donc il 
    29772996   est passé au dictionnaire suivant et, heureusement, est reconnu (en fait, 
    29782997   <literal>english_stem</literal> est un dictionnaire Snowball qui reconnaît 
     
    31363155    <para> 
    31373156     La fonction <function>ts_lexize</function> attend un seul jeton, pas du 
    3138      texte. Voici un cas où cela peut devenir confus&nbsp;: 
     3157     texte. Voici un cas où cela peut devenir source de confusion&nbsp;: 
    31393158 
    31403159<programlisting> 
     
    31463165 
    31473166     Le dictionnaire thésaurus <literal>thesaurus_astro</literal> connaît la 
    3148      phrase <literal>supernovae stars</literal> mais <function>ts_lexize</function> 
    3149      Ã©choue car il ne peut pas analyser le texte en entrée mais traite bien en tant 
     3167     phrase <literal>supernovae stars</literal> mais 
     3168     <function>ts_lexize</function> échoue car il ne peut pas analyser le texte 
     3169     en entrée mais le traite bien en tant 
    31503170     que simple jeton. Utilisez <function>plainto_tsquery</function> ou 
    31513171     <function>to_tsvector</function> pour tester les dictionnaires thésaurus. 
     
    32313251 
    32323252  <para> 
    3233    Il y a des différents de performances substentielles entre les deux types 
     3253   Il y a des différences de performances substantielles entre les deux types 
    32343254   d'index, donc il est important de comprendre lequel utiliser. 
    32353255  </para> 
     
    32403260   ligne de la table pour les éliminer. 
    32413261   <productname>PostgreSQL</productname> le fait automatiquement&nbsp;; par 
    3242    exemple, dans le plan de requête ci-dessous, la ligne <literal>Filter:</literal> 
    3243    indique que la sortie de l'index sera de nouveau vérifiée&nbsp;: 
     3262   exemple, dans le plan de requête ci-dessous, la ligne 
     3263   <literal>Filter:</literal> indique que la sortie de l'index est de nouveau 
     3264   vérifiée&nbsp;: 
    32443265 
    32453266<programlisting> 
     
    32813302   valeurs <type>tsvector</type>, et non pas leur poids. Du coup, alors qu'un 
    32823303   index GIN peut être considéré sans perte pour une requête qui ne précise pas 
    3283    de poids, il l'est pour les autres. Donc, une deuxiÚme vérification d'une 
     3304   de poids, il l'est pour les autres. Une deuxiÚme vérification d'une 
    32843305   ligne de table est nécessaire lors de l'utilisation d'une requête impliquant 
    32853306   des poids. Malheureusement, dans la conception actuelle de 
     
    33033324    <para> 
    33043325     Un opérateur de correspondance supplémentaire, <literal>@@@</literal>, 
    3305      est fourni et marqué comme à perte pour les index GIN. Cet opérateur se 
    3306      comporte exactement comme <literal>@@</literal> sinon
     3326     est fourni et marqué comme à perte pour les index GIN. Sinon, cet 
     3327     opérateur se comporte exactement comme <literal>@@</literal>
    33073328    </para> 
    33083329   </listitem> 
     
    33303351  <para> 
    33313352   Dans le choix du type d'index à utiliser, GiST ou GIN, pensez à ces 
    3332    différences de performancer&nbsp;: 
     3353   différences de performances&nbsp;: 
    33333354 
    33343355   <itemizedlist  spacing="compact" mark="bullet"> 
    33353356    <listitem> 
    33363357     <para> 
    3337       les recherches par index GIN sont environ trois fois plus rapides que 
    3338       celles par index GiST 
     3358      Les recherches par index GIN sont environ trois fois plus rapides que 
     3359      celles par index GiST. 
    33393360     </para> 
    33403361    </listitem> 
    33413362    <listitem> 
    33423363     <para> 
    3343       les index GIN prennent trois fois plus de temps à se contruire que les 
    3344       index GiST 
     3364      Les index GIN prennent trois fois plus de temps à se contruire que les 
     3365      index GiST. 
    33453366     </para> 
    33463367    </listitem> 
     
    33483369     <para> 
    33493370      Les index GIN sont environ dix fois plus lents à mettre à jour que les 
    3350       index GiST 
     3371      index GiST. 
    33513372     </para> 
    33523373    </listitem> 
    33533374    <listitem> 
    33543375     <para> 
    3355       les index GIN sont entre deux et trois fois plus gros que les index GiST 
     3376      Les index GIN sont entre deux et trois fois plus gros que les index GiST. 
    33563377     </para> 
    33573378    </listitem> 
     
    34063427   recherche plein texte, pouvant être qualifié du nom du schéma. Si 
    34073428   <literal>MODÈLE</literal> est omis, alors l'information sur tous les 
    3408    objets visibles sera affichée. <literal>MODÈLE</literal> peut être une 
     3429   objets visibles est affichée. <literal>MODÈLE</literal> peut être une 
    34093430   expression rationnelle et peut fournir des modÚles 
    34103431   <emphasis>séparés</emphasis> pour les noms du schéma et de l'objet. Les 
     
    36683689     <literal>pg_catalog</literal> alors que, dans une installation précédente, 
    36693690     elles auraient fait partie de <literal>public</literal> ou d'un autre 
    3670      schéma non systÚme. Il existe une nouvelle version de 
    3671      <filename>contrib/tsearch2</filename> (voir <xref linkend="tsearch2"/>) 
     3691     schéma utilisateur. Il existe une nouvelle version de 
     3692     <filename>contrib/tsearch2</filename> (voir la <xref linkend="tsearch2"/>) 
    36723693     qui fournit une couche de compatibilité permettant de résoudre la majorité 
    36733694     des problÚmes connus. 
     
    36813702     supprimés lors du chargement d'une sauvegarde 
    36823703     <application>pg_dump</application> provenant d'une version antérieure à 
    3683      la 8.3. Bien que beaucoup des objets ne seront pas chargés de toute 
    3684      façon, certains le seront et pourraient causer des problÚmes. La 
     3704     la 8.3. Bien que beaucoup des objets ne sont pas chargés de toute 
     3705     façon, certains le sont et peuvent causer des problÚmes. La 
    36853706     façon la plus simple de gérer ceci est de charger seulement le module 
    36863707     <filename>contrib/tsearch2</filename> avant la restauration de la 
     
    36943715     complÚtement différent maintenant. Au lieu d'insérer manuellement des 
    36953716     lignes dans les tables de configuration, la recherche se configure avec 
    3696      commandes SQL spécialisées indiquées dans tout ce chapitre. Il n'existe 
     3717     des commandes SQL spécialisées indiquées dans tout ce chapitre. Il n'existe 
    36973718     pas encore de support automatisé pour convertir une configuration 
    3698      personnalisée existante pour la 8.3. Vous devrez vous en occuper 
     3719     personnalisée existante pour la 8.3. Vous devez vous en occuper 
    36993720     manuellement. 
    37003721    </para> 
     
    37113732      <listitem> <