Changeset 841
- Timestamp:
- 12/10/07 18:11:39 (1 year ago)
- Files:
-
- traduc/trunk/manuel/textsearch.xml (modified) (84 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
traduc/trunk/manuel/textsearch.xml
r838 r841 17 17 <para> 18 18 La recherche plein texte (ou plus simplement la <firstterm>recherche de 19 texte</firstterm>) fournit la capacité d'identifier des19 texte</firstterm>) permet de sélectionner des 20 20 <firstterm>documents</firstterm> en langage naturel qui satisfont une 21 21 <firstterm>requête</firstterm> et, en option, de les trier par intérêt 22 suivant larequête. Le type le plus fréquent de recherche concerne la22 suivant cette requête. Le type le plus fréquent de recherche concerne la 23 23 récupération de tous les documents contenant les <firstterm>termes de 24 24 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 26 27 <varname>requête</varname> et de <varname>similarité</varname> peuvent 27 28 beaucoup variées et dépendent de l'application réelle. La recherche … … 32 33 33 34 <para> 34 Les opérateurs de recherche plein texte ont existédepuis longtemps dans35 Les opérateurs de recherche plein texte existent depuis longtemps dans 35 36 les bases de données. <productname>PostgreSQL</productname> dispose des 36 37 opérateurs <literal>~</literal>, <literal>~*</literal>, … … 45 46 Aucun support linguistique, même pour l'anglais. Les expressions 46 47 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 48 50 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>. 50 53 Il est possible d'utiliser <literal>OR</literal> pour rechercher plusieurs 51 formes dérivées mais cela devient complexe et facilite les erreurs52 (certains mots peuvent avoir des centaines de varia tions).54 formes dérivées mais cela devient complexe et augmente le risque d'erreur 55 (certains mots peuvent avoir des centaines de variantes). 53 56 </para> 54 57 </listitem> … … 72 75 <para> 73 76 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 : 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 : 76 80 </para> 77 81 … … 103 107 besoin de saisir toutes les variantes possibles. De plus, cette étape 104 108 élimine typiquement les <firstterm>termes courants</firstterm>, qui sont 105 des mots si courants qu'il est inutile de les rechercher. (Donc, les109 des mots si courants qu'il est inutile de les rechercher. Donc, les 106 110 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. 108 112 <productname>PostgreSQL</productname> utilise des 109 113 <firstterm>dictionnaires</firstterm> pour réaliser cette étape. … … 116 120 <para> 117 121 <emphasis>Stockage des documents pré-traités pour optimiser la recherche 118 </emphasis>. Par exemple, chaque document peut être représenté comme un122 </emphasis>. Chaque document peut être représenté comme un 119 123 tableau trié de lexemes normalisés. Avec ces lexemes, il est souvent 120 124 souhaitable de stocker des informations de position à utiliser pour … … 147 151 <listitem> 148 152 <para> 149 Ãtablir une correspondance sentre des phrases et un simple mot en utilisant153 Ãtablir une correspondance entre des phrases et un simple mot en utilisant 150 154 un thésaurus. 151 155 </para> … … 154 158 <listitem> 155 159 <para> 156 Ãtablir une correspondance sentre différentes variations d'un mot et une160 Ãtablir une correspondance entre différentes variations d'un mot et une 157 161 forme canonique en utilisant un dictionnaire <application>Ispell</application>. 158 162 </para> … … 170 174 <para> 171 175 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êtes176 pré-traités, avec un type <type>tsquery</type> pour représenter les requêtes 173 177 traitées (<xref linkend="datatype-textsearch"/>). Il existe beaucoup de 174 178 fonctions et d'opérateurs disponibles pour ces types de données 175 179 (<xref linkend="functions-textsearch"/>), le plus important étant l'opérateur 176 de correspondance , <literal>@@</literal>, dont nous parlons dans180 de correspondance <literal>@@</literal>, dont nous parlons dans la 177 181 <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"/>). 179 184 </para> 180 185 … … 190 195 <para> 191 196 Un <firstterm>document</firstterm> est l'unité de recherche dans un systÚme 192 de recherche plein texte ;par exemple un article de magazine ou un193 message email. Le moteur de larecherche plein texte doit être capable197 de recherche plein texte, par exemple un article de magazine ou un 198 message email. Le moteur de recherche plein texte doit être capable 194 199 d'analyser des documents et de stocker les associations de lexemes (mots 195 200 clés) avec les documents parents. Ensuite, ces associations seront utilisées … … 227 232 <para> 228 233 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 êtreutilisée pour234 texte du systÚme de fichiers. Dans ce cas, la base est utilisée pour 230 235 stocker l'index de recherche plein texte et pour exécuter les recherches, et 231 un identifiant unique peut êtreutilisé pour retrouver le document sur le236 un identifiant unique est utilisé pour retrouver le document sur le 232 237 systÚme de fichiers. Néanmoins, retrouver les fichiers en dehors de la base 233 238 demande les droits d'un superutilisateur ou le support de fonctions spéciales, … … 240 245 <para> 241 246 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> 244 250 d'un document — le texte original n'a besoin d'être retrouvé que 245 lorsque le document a été sélectionné pour être montr erà l'utilisateur.251 lorsque le document a été sélectionné pour être montré à l'utilisateur. 246 252 Nous utilisons souvent <type>tsvector</type> pour le document mais, bien 247 253 sûr, il ne s'agit que d'une représentation compacte du document complet. … … 277 283 <type>tsquery</type> contient des termes de recherche qui doivent déjà être 278 284 des lexemes normalisés, et peut combiner plusieurs termes en utilisant les 279 opérateurs AND, OR et NOT. (Pour les détails, voir <xref285 opérateurs AND, OR et NOT. (Pour les détails, voir la <xref 280 286 linkend="datatype-textsearch"/>.) Les fonctions <function>to_tsquery</function> 281 287 et <function>plainto_tsquery</function> sont utiles pour convertir un texte … … 284 290 <function>to_tsvector</function> est utilisé pour analyser et normaliser un 285 291 document. Donc, en pratique, une correspondance de recherche ressemblerait 286 plu sà ceci :292 plutÃŽt à ceci : 287 293 288 294 <programlisting> … … 293 299 </programlisting> 294 300 295 Observez que cette correspondance ne réussi rapas si elle est écrite301 Observez que cette correspondance ne réussit pas si elle est écrite 296 302 ainsi : 297 303 … … 324 330 325 331 <para> 326 La premiÚre des deux que nous avons déjà vu. La forme332 Nous avons déjà vu les deux premiÚres. La forme 327 333 <type>text</type> <literal>@@</literal> <type>tsquery</type> est 328 334 équivalent à <literal>to_tsvector(x) @@ y</literal>. … … 352 358 Lors de l'installation, une configuration appropriée est sélectionnée et 353 359 <xref linkend="guc-default-text-search-config"/> est configuré dans 354 <filename>postgresql.conf</filename> pour l'utiliser par défaut. Si vous355 utilisez la même configuration de recherche plein texte pour le cluster356 entier, vous pouvez utiliser la valeur de360 <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 357 363 <filename>postgresql.conf</filename>. Pour utiliser différentes configurations 358 364 dans le cluster mais avec la même configuration pour une base, utilisez … … 364 370 Chaque fonction de recherche plein texte qui dépend d'une configuration a 365 371 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. 367 373 <varname>default_text_search_config</varname> est seulement utilisé quand 368 374 cet argument est omis. … … 371 377 <para> 372 378 Pour rendre plus facile la construction de configurations de recherche 373 plein texte, une configuration est construite à partir d'objets simples374 debase de données. La recherche plein texte de379 plein texte, une configuration est construite à partir d'objets de la 380 base de données. La recherche plein texte de 375 381 <productname>PostgreSQL</productname> fournit quatre types d'objets 376 382 relatifs à la configuration : … … 444 450 <para> 445 451 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 ligne447 contenant le mot <literal>friend</literal> dans son champ452 qui ne fait qu'afficher le champ <structname>title</structname> de chaque 453 ligne contenant le mot <literal>friend</literal> dans son champ 448 454 <structfield>body</structfield> ressemble à ceci : 449 455 … … 454 460 </programlisting> 455 461 456 Ceci trouve raaussi les mots relatifs comme <literal>friends</literal>462 Ceci trouve aussi les mots relatifs comme <literal>friends</literal> 457 463 et <literal>friendly</literal> car ils ont tous la même racine, le même 458 464 lexeme normalisé. … … 460 466 461 467 <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 : 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 : 465 472 466 473 <programlisting> … … 470 477 </programlisting> 471 478 472 Cette requête utilisera l'ensemble de configuration indiqué <xref479 Cette requête utilisera l'ensemble de configuration indiqué par <xref 473 480 linkend="guc-default-text-search-config"/>. 474 481 </para> … … 493 500 494 501 <para> 495 Bien que ces requêtes fonctionne ront sans index, la plupart des applications496 trouve ront cette approche trop lente, sauf peut-être pour des recherches502 Bien que ces requêtes fonctionnent sans index, la plupart des applications 503 trouvent cette approche trop lente, sauf peut-être pour des recherches 497 504 occasionnelles. Une utilisation pratique de la recherche plein texte réclame 498 505 habituellement la création d'un index. … … 515 522 Notez que la version à deux arguments de <function>to_tsvector</function> 516 523 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 518 526 (<xref linkend="indexes-expressional"/>). Ceci est dû au fait que le contenu 519 527 de l'index ne doit pas être affecté par <xref 520 528 linkend="guc-default-text-search-config"/>. Dans le cas contraire, le 521 contenu de l'index p ourrait êtreincohérent parce que différentes entrées529 contenu de l'index peut devenir incohérent parce que différentes entrées 522 530 pourraient contenir des <type>tsvector</type> créés avec différentes 523 531 configurations de recherche plein texte et qu'il ne serait plus possible de … … 530 538 été utilisée dans l'index ci-dessus, seule une référence de la requête 531 539 qui utilise la version à deux arguments de <function>to_tsvector</function> 532 avec le même nom de configuration utilise racet index. C'est-à -dire que540 avec le même nom de configuration utilise cet index. C'est-à -dire que 533 541 <literal>WHERE to_tsvector('english', body) @@ 'a & b'</literal> peut 534 542 utiliser l'index, mais <literal>WHERE to_tsvector(body) @@ 'a & b'</literal> 535 ne le peut pas. Ceci nous assure qu'un index seraseulement utilisé avec la543 ne le peut pas. Ceci nous assure qu'un index est seulement utilisé avec la 536 544 même configuration que celle utilisée pour créer les entrées de l'index. 537 545 </para> 538 546 539 547 <para> 540 Il est possible de configurer des index avec expressionplus complexes541 où le nom de configuration est indiqué dans une autre colonne. Par548 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 542 550 exemple : 543 551 … … 549 557 <literal>pgweb</literal>. Ceci permet l'utilisation de configuration 550 558 mixe dans le même index tout en enregistrant la configuration utilisée 551 pour chaque entrée d'index. Ceci est utile dans l acas d'une bibliothÚque559 pour chaque entrée d'index. Ceci est utile dans le cas d'une bibliothÚque 552 560 de documents dans différentes langues. Encore une fois, les requêtes 553 561 voulant utiliser l'index doivent être écrites pour correspondre à … … 565 573 566 574 <para> 567 Une autre approche re nvient à créer une colonne <type>tsvector</type>575 Une autre approche revient à créer une colonne <type>tsvector</type> 568 576 séparée pour contenir le résultat de <function>to_tsvector</function>. Cet 569 577 exemple est une concaténation de <literal>title</literal> et 570 578 <literal>body</literal>, en utilisant <function>coalesce</function> pour 571 s'assurer qu'un champ seratoujours indexé même si l'autre vaut579 s'assurer qu'un champ est toujours indexé même si l'autre vaut 572 580 <literal>NULL</literal> : 573 581 … … 599 607 <type>tsvector</type>, il est nécessaire d'ajouter un trigger pour 600 608 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 602 610 <xref linkend="textsearch-update-triggers"/> explique comment le faire. 603 611 </para> … … 610 618 de <varname>default_text_search_config</varname>. Un autre avantage est que 611 619 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 ; 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 ; voir la <xref 623 linkend="textsearch-indexes"/>.) 615 624 Néanmoins, l'approche de l'index par expression est plus simple à 616 625 configurer et elle réclame moins d'espace disque car la représentation … … 658 667 <type>tsvector</type> qui liste les lexemes avec leur position dans le 659 668 document. Ce dernier est traité suivant la configuration de recherche 660 plein texte spécifié ou celle par défaut. Voici un exemple simple :669 plein texte spécifiée ou celle par défaut. Voici un exemple simple : 661 670 662 671 <programlisting> … … 692 701 aucun dictionnaire de la liste ne reconnaît le jeton, il est aussi ignoré. 693 702 Dans cet exemple, il s'agit du signe de ponctuation <literal>-</literal> 694 car il n'existe aucun edictionnaire affecté à ce type de jeton703 car il n'existe aucun dictionnaire affecté à ce type de jeton 695 704 (<literal>Space symbols</literal>), ce qui signifie que les jetons espace 696 705 ne seront jamais indexés. Le choix de l'analyseur, des dictionnaires et des … … 708 717 <firstterm>poids</firstterm> donné. Ce poids consiste en une lettre : 709 718 <literal>A</literal>, <literal>B</literal>, <literal>C</literal> ou 710 <literal>D</literal>. Il est typiquement utilisépour marquer les entrées719 <literal>D</literal>. Elle est utilisée typiquement pour marquer les entrées 711 720 provenant de différentes parties d'un document, comme le titre et le corps. 712 721 Plus tard, cette information peut être utilisée pour modifier le score des … … 715 724 716 725 <para> 717 Comme <function>to_tsvector</function>(<literal>NULL</literal>) renv erra726 Comme <function>to_tsvector</function>(<literal>NULL</literal>) renvoie 718 727 <literal>NULL</literal>, il est recommandé d'utiliser 719 <function>coalesce</function> quand un champ p ourrait être NULL. Voici la728 <function>coalesce</function> quand un champ peut être NULL. Voici la 720 729 méthode recommandée pour créer un <type>tsvector</type> à partir d'un 721 730 document structuré : … … 730 739 731 740 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énation734 des <type>tsvector</type>, <literal>||</literal>. (<xref735 linkend="textsearch-manipulate-tsvector"/> donne ntdes détails sur ces741 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 736 745 opérations.) 737 746 </para> … … 761 770 <para> 762 771 <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 764 774 individuels séparés par les opérateurs booléens <literal>&</literal> 765 775 (AND), <literal>|</literal> (OR) et <literal>!</literal> (NOT). Ces 766 776 opérateurs peuvent être groupés en utilisant des parenthÚses. En d'autres 767 777 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 <xref769 linkend="datatype-textsearch"/>. La différence est que, alors qu'un e778 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 770 780 <type>tsquery</type> basique prend les jetons bruts, 771 781 <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 qui782 utilisant la configuration spécifiée ou par défaut, et annule tout jeton qui 773 783 est un terme courant d'aprÚs la configuration. Par exemple : 774 784 … … 780 790 </programlisting> 781 791 782 Comme une entrée <type>tsquery</type> basique, le(s) poidt(s)peuvent être783 attaché (s)à chaque lexeme à restreindre pour établir une correspondance792 Comme une entrée <type>tsquery</type> basique, des poidts peuvent être 793 attachés à chaque lexeme à restreindre pour établir une correspondance 784 794 avec seulement des lexemes <type>tsvector</type> de ces poids. Par 785 795 exemple : … … 793 803 794 804 <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 797 808 ci-dessous, un thésaurus contient la rÚgle <literal>supernovae 798 stars : sn</literal> :809 stars : sn</literal> : 799 810 800 811 <programlisting> … … 805 816 </programlisting> 806 817 807 sans guillemets, <function>to_tsquery</function> génà ©reraune erreur de818 sans guillemets, <function>to_tsquery</function> génÚre une erreur de 808 819 syntaxe pour les jetons qui ne sont pas séparés par un opérateur AND ou OR. 809 820 </para> … … 866 877 pourrait demander plus d'informations pour calculer le score, par exemple 867 878 la date et l'heure de modification du document. Les fonctions internes de 868 score sont seulement des exemples. Vous pouvez écrire vos propres fonctions869 de score et/ou combiner leur résultats avec des facteurs supplémentaires870 pour remplir un besoin spécifique.879 calcul de score sont seulement des exemples. Vous pouvez écrire vos propres 880 fonctions de score et/ou combiner leur résultats avec des facteurs 881 supplémentaires pour remplir un besoin spécifique. 871 882 </para> 872 883 … … 913 924 Cette fonction calcule le score de la <firstterm>densité de 914 925 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. 918 930 </para> 919 931 920 932 <para> 921 933 Cette fonction nécessite des informations de position. Du coup, elle 922 ne fonctionne rapas sur des valeurs <type>tsvector</type>923 <quote>strippées</quote> — elle renv erratoujours zéro.934 ne fonctionne pas sur des valeurs <type>tsvector</type> 935 <quote>strippées</quote> — elle renvoie toujours zéro. 924 936 </para> 925 937 </listitem> … … 948 960 </programlisting> 949 961 950 Typiquement s, les poids sont utilisés pour marquer les mots compris dans962 Typiquement, les poids sont utilisés pour marquer les mots compris dans 951 963 des aires spéciales du document, comme le titre ou le résumé initial, pour 952 964 qu'ils puissent être traités avec plus ou moins d'importance que les mots … … 1107 1119 <para> 1108 1120 Si une chaîne <replaceable>options</replaceable> est spécifiée, elle doit 1109 consister en une liste de une ou plusieurs pair s1121 consister en une liste de une ou plusieurs paires 1110 1122 <replaceable>option</replaceable><literal>=</literal><replaceable>valeur</replaceable> 1111 1123 séparées par des virgules. Les options disponibles sont : … … 1209 1221 1210 1222 <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 1212 1225 en texte brut peuvent être convertis en valeurs <type>tsvector</type>. 1213 1226 <productname>PostgreSQL</productname> fournit aussi des fonctions et des … … 1241 1254 concaténation des deux documents originaux. (L'équivalence n'est pas 1242 1255 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é sles positions1256 n'affectera pas le résultat alors qu'ils auraient affecté les positions 1244 1257 des lexemes dans l'argument droit si la concaténation de texte avait été 1245 1258 utilisée.) … … 1343 1356 1344 1357 <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 1346 1360 texte peuvent être converties en valeurs de type <type>tsquery</type>. 1347 1361 <productname>PostgreSQL</productname> fournit aussi des fonctions et des … … 1415 1429 <listitem> 1416 1430 <para> 1417 Renvoie le nombre de n oeuds (lexemes et opérateurs) dans un1431 Renvoie le nombre de nÅuds (lexemes et opérateurs) dans un 1418 1432 <type>tsquery</type>. Cette fonction est utile pour déterminer si la 1419 1433 requête (<replaceable>query</replaceable>) a un sens … … 1483 1497 remplace chaque occurrence avec une autre sous-requête de substitution. 1484 1498 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 1486 1501 et substitut peut être vu comme une <firstterm>rÚgle de ré-écriture de la 1487 1502 requête</firstterm>. Un ensemble de rÚgles de ré-écriture peut être une … … 1569 1584 1570 1585 <para> 1571 Considérons un exemple réel pour l'astronomie. Nous étend rons la requête1586 Considérons un exemple réel pour l'astronomie. Nous étendons la requête 1572 1587 <literal>supernovae</literal> en utilisant les rÚgles de ré-écriture par 1573 1588 la table : … … 1602 1617 les opérateurs de contenant pour le type <type>tsquery</type>. Dans 1603 1618 l'exemple ci-dessous, nous sélectionnons seulement les rÚgles qui 1604 p ourraient correspondre avec la requête originale :1619 peuvent correspondre avec la requête originale : 1605 1620 1606 1621 <programlisting> … … 1630 1645 trigger pour mettre à jour la colonne <type>tsvector</type> quand le 1631 1646 contenu des colonnes document change. Deux fonctions trigger intégrées 1632 sont disponibles pour cela, mais vous pouvez aussi écrire la v otre.1647 sont disponibles pour cela, mais vous pouvez aussi écrire la vÃŽtre. 1633 1648 </para> 1634 1649 … … 1672 1687 <structfield>title</structfield> ou <structfield>body</structfield> sera 1673 1688 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. 1675 1690 </para> 1676 1691 … … 1687 1702 trigger est le nom d'une autre colonne de table qui doit être du type 1688 1703 <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). 1693 1709 </para> 1694 1710 … … 1806 1822 jetons. L'ensemble des types possibles est défini par l'analyseur lui-même. 1807 1823 Notez qu'un analyseur ne modifie pas le texte — il identifie les 1808 limites plausibles des mots. Comme son domain est limité, il est moins1824 limites plausibles des mots. Comme son domaine est limité, il est moins 1809 1825 important de pouvoir construire des analyseurs personnalisés pour une 1810 1826 application. Actuellement, <productname>PostgreSQL</productname> fournit … … 1898 1914 <row> 1899 1915 <entry><literal>url_path</literal></entry> 1900 <entry> chemin URL</entry>1916 <entry>Chemin URL</entry> 1901 1917 <entry><literal>/stuff/index.html</literal>, in the context of a URL</entry> 1902 1918 </row> … … 2007 2023 succÚs est appelé un <firstterm>lexeme</firstterm>. En dehors d'améliorer 2008 2024 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 pas2011 toujours une signification linguistique et dépend habituellement de la2012 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. 2013 2029 </para> 2014 2030 … … 2115 2131 liste des dictionnaires est de placer en premier les dictionnaires les plus 2116 2132 précis, les plus spécifiques, puis les dictionnaires généralistes, en 2117 finissant a bec un dictionnaire le plus général possible, comme par exemple2133 finissant avec un dictionnaire le plus général possible, comme par exemple 2118 2134 un stemmer <application>Snowball</application> ou <literal>simple</literal>, 2119 2135 qui reconnait tout. Par exemple, pour une recherche en astronomie … … 2255 2271 <para> 2256 2272 Avec le paramÚtrage par défaut d'<literal>Accept</literal> (à savoir, 2257 <literal>true</literal>), il est justepréférable de placer un dictionnaire2258 <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. 2259 2275 <literal>Accept</literal> = <literal>false</literal> est seulement utile 2260 2276 quand il y a au moins un dictionnaire aprÚs celui-ci. … … 2291 2307 Ce modÚle de dictionnaire est utilisé pour créer des dictionnaires qui 2292 2308 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"/>). 2294 2311 Un dictionnaire des synonyme peut être utilisé pour contourner des problÚmes 2295 2312 linguistiques, par exemple pour empêcher un dictionnaire stemmer anglais de … … 2329 2346 Le format du fichier est une ligne par mot à substituer, avec le mot suivi 2330 2347 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 mises2348 espaces aprÚs les mots sont ignorés, les lettres majuscules sont mises 2332 2349 en minuscules. 2333 2350 </para> … … 2340 2357 <para> 2341 2358 Un dictionnaire thésaurus (parfois abrévié en <acronym>TZ</acronym>) est 2342 un ensemble de mots qui incl ient des informations sur les relations des2359 un ensemble de mots qui incluent des informations sur les relations des 2343 2360 mots et des phrases, par exemple des termes plus lointains 2344 2361 (<acronym>BT</acronym>), plus proches (<acronym>NT</acronym>), des termes … … 2356 2373 2357 2374 <programlisting> 2358 # this is a comment2359 sample word(s) : indexed word(s)2360 more sample word(s) : more indexed word(s)2375 # ceci est un commentaire 2376 mots(s) : mot(s) indexé(s) 2377 d'autre(s) mot(s) : d'autre(s) mot(s) indexé(s) 2361 2378 ... 2362 2379 </programlisting> … … 2371 2388 texte en entrée avant la vérification des correspondances de phrases. Un 2372 2389 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 2374 2392 supprimer l'utilisation du mot ou le faire connaître au sous-dictionnaire. 2375 2393 Vous pouvez placer une astérisque (<symbol>*</symbol>) devant un mot indexé … … 2436 2454 </programlisting> 2437 2455 2438 Here:2456 Dans ce cas : 2439 2457 <itemizedlist spacing="compact" mark="bullet"> 2440 2458 <listitem> … … 2446 2464 <para> 2447 2465 <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 2450 2467 <filename>$SHAREDIR/tsearch_data/mythesaurus.ths</filename>, 2451 où <literal>$SHAREDIR</literal> signifie le répertoire des données2452 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.) 2453 2470 </para> 2454 2471 </listitem> … … 2521 2538 2522 2539 En principe, il es possible d'utiliser <function>to_tsquery</function> si 2523 vous place rl'argument entre guillemets :2540 vous placez l'argument entre guillemets : 2524 2541 2525 2542 <programlisting> … … 2559 2576 2560 2577 <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 2562 2580 des <firstterm>dictionnaires morphologiques</firstterm> qui peuvent 2563 normalis ésplusieurs formes linguisitiques différentes d'un mot en un même2581 normaliser plusieurs formes linguisitiques différentes d'un mot en un même 2564 2582 lexeme. Par exemple, un dictionnaire <application>Ispell</application> 2565 2583 anglais peut établir une correspondance avec toutes les déclinaisons et 2566 2584 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>, 2568 2587 <literal>banks'</literal> et <literal>bank's</literal>. 2569 2588 </para> … … 2652 2671 <para> 2653 2672 Le modÚle de dictionnaire <application>Snowball</application> est basé sur 2654 le projet de Martin Porter, inventeur d e du populaire algorithme stemming de2673 le projet de Martin Porter, inventeur du populaire algorithme stemming de 2655 2674 Porter pour l'anglais. Snowball propose maintenant des algorithmes stemming 2656 pour de nombreuseslangues (voir le <ulink2675 pour un grand nombre de langues (voir le <ulink 2657 2676 url="http://snowball.tartarus.org">site Snowball</ulink> pour plus 2658 2677 d'informations). Chaque algorithme sait comment réduire les variantes 2659 standard d emot vers une base, ou stem, en rapport avec la langue. Un2678 standard d'un mot vers une base, ou stem, en rapport avec la langue. Un 2660 2679 dictionnaire Snowball réclame un paramÚtre <literal>langue</literal> pour 2661 identifie le stemmer à utiliser et, en option, un nom de fichier des2680 identifier le stemmer à utiliser et, en option, un nom de fichier des 2662 2681 <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> 2664 2684 sont aussi fournies par le projet Snowball.) Par exemple, il existe un 2665 2685 équivalent de la définition interne en … … 2745 2765 2746 2766 Ensuite, nous enregistrons le dictionnaire <productname>Ispell</productname> 2747 <literal>english_ispell</literal> ,qui a ses propres fichiers de2767 <literal>english_ispell</literal> qui a ses propres fichiers de 2748 2768 configuration : 2749 2769 … … 2817 2837 <para> 2818 2838 Le comportement d'une configuration personnalisée de recherche plein texte 2819 peut facilement devenir suffisam ent compliqué pour être confuse ou2839 peut facilement devenir suffisamment compliqué pour être confuse ou 2820 2840 indésirable. Les fonctions décrites dans cette section sont utiles pour 2821 2841 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. 2824 2843 </para> 2825 2844 … … 2972 2991 <literal>asciiword</literal>). Pour ce type de jeton, la liste de dictionnaire 2973 2992 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 par2975 le nom<literal>bright</literal>. Le mot <literal>supernovaes</literal> est2976 inconnu dans le dictionnaire <literal>english_ispell</literal> don til2993 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 2977 2996 est passé au dictionnaire suivant et, heureusement, est reconnu (en fait, 2978 2997 <literal>english_stem</literal> est un dictionnaire Snowball qui reconnaît … … 3136 3155 <para> 3137 3156 La fonction <function>ts_lexize</function> attend un seul jeton, pas du 3138 texte. Voici un cas où cela peut devenir confus :3157 texte. Voici un cas où cela peut devenir source de confusion : 3139 3158 3140 3159 <programlisting> … … 3146 3165 3147 3166 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 3150 3170 que simple jeton. Utilisez <function>plainto_tsquery</function> ou 3151 3171 <function>to_tsvector</function> pour tester les dictionnaires thésaurus. … … 3231 3251 3232 3252 <para> 3233 Il y a des différen ts de performances substentielles entre les deux types3253 Il y a des différences de performances substantielles entre les deux types 3234 3254 d'index, donc il est important de comprendre lequel utiliser. 3235 3255 </para> … … 3240 3260 ligne de la table pour les éliminer. 3241 3261 <productname>PostgreSQL</productname> le fait automatiquement ; 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 : 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 : 3244 3265 3245 3266 <programlisting> … … 3281 3302 valeurs <type>tsvector</type>, et non pas leur poids. Du coup, alors qu'un 3282 3303 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'une3304 de poids, il l'est pour les autres. Une deuxiÚme vérification d'une 3284 3305 ligne de table est nécessaire lors de l'utilisation d'une requête impliquant 3285 3306 des poids. Malheureusement, dans la conception actuelle de … … 3303 3324 <para> 3304 3325 Un opérateur de correspondance supplémentaire, <literal>@@@</literal>, 3305 est fourni et marqué comme à perte pour les index GIN. Cet opérateur se3306 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>. 3307 3328 </para> 3308 3329 </listitem> … … 3330 3351 <para> 3331 3352 Dans le choix du type d'index à utiliser, GiST ou GIN, pensez à ces 3332 différences de performance r :3353 différences de performances : 3333 3354 3334 3355 <itemizedlist spacing="compact" mark="bullet"> 3335 3356 <listitem> 3336 3357 <para> 3337 les recherches par index GIN sont environ trois fois plus rapides que3338 celles par index GiST 3358 Les recherches par index GIN sont environ trois fois plus rapides que 3359 celles par index GiST. 3339 3360 </para> 3340 3361 </listitem> 3341 3362 <listitem> 3342 3363 <para> 3343 les index GIN prennent trois fois plus de temps à se contruire que les3344 index GiST 3364 Les index GIN prennent trois fois plus de temps à se contruire que les 3365 index GiST. 3345 3366 </para> 3346 3367 </listitem> … … 3348 3369 <para> 3349 3370 Les index GIN sont environ dix fois plus lents à mettre à jour que les 3350 index GiST 3371 index GiST. 3351 3372 </para> 3352 3373 </listitem> 3353 3374 <listitem> 3354 3375 <para> 3355 les index GIN sont entre deux et trois fois plus gros que les index GiST3376 Les index GIN sont entre deux et trois fois plus gros que les index GiST. 3356 3377 </para> 3357 3378 </listitem> … … 3406 3427 recherche plein texte, pouvant être qualifié du nom du schéma. Si 3407 3428 <literal>MODÃLE</literal> est omis, alors l'information sur tous les 3408 objets visibles seraaffichée. <literal>MODÃLE</literal> peut être une3429 objets visibles est affichée. <literal>MODÃLE</literal> peut être une 3409 3430 expression rationnelle et peut fournir des modÚles 3410 3431 <emphasis>séparés</emphasis> pour les noms du schéma et de l'objet. Les … … 3668 3689 <literal>pg_catalog</literal> alors que, dans une installation précédente, 3669 3690 elles auraient fait partie de <literal>public</literal> ou d'un autre 3670 schéma non systÚme. Il existe une nouvelle version de3671 <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"/>) 3672 3693 qui fournit une couche de compatibilité permettant de résoudre la majorité 3673 3694 des problÚmes connus. … … 3681 3702 supprimés lors du chargement d'une sauvegarde 3682 3703 <application>pg_dump</application> provenant d'une version antérieure à 3683 la 8.3. Bien que beaucoup des objets ne s eront pas chargés de toute3684 façon, certains le s eront et pourraient causer des problÚmes. La3704 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 3685 3706 façon la plus simple de gérer ceci est de charger seulement le module 3686 3707 <filename>contrib/tsearch2</filename> avant la restauration de la … … 3694 3715 complÚtement différent maintenant. Au lieu d'insérer manuellement des 3695 3716 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'existe3717 des commandes SQL spécialisées indiquées dans tout ce chapitre. Il n'existe 3697 3718 pas encore de support automatisé pour convertir une configuration 3698 personnalisée existante pour la 8.3. Vous dev rez vous en occuper3719 personnalisée existante pour la 8.3. Vous devez vous en occuper 3699 3720 manuellement. 3700 3721 </para> … … 3711 3732 <listitem> <

