Partager via


Choisir une langue lors de la création d’un index de recherche en texte intégral

S’applique à :SQL ServerAzure SQL Database

Lorsque vous créez un index de recherche en texte intégral, vous devez spécifier une langue au niveau de la colonne pour la colonne indexée. Les analyseurs de mots et les générateurs de formes dérivées de la langue spécifiée sont utilisés par des requêtes de texte intégral sur la colonne. Plusieurs aspects doivent être pris en considération pour le choix de la langue d'une colonne lors de la création d'un index de texte intégral. Ces considérations concernent la façon dont votre texte est tokenisé, puis indexé par le moteur de Full-Text.

Notes

Pour spécifier une langue au niveau des colonnes d’une colonne d’index de recherche en texte intégral, utilisez la LANGUAGE <language_term> clause lors de la spécification de la colonne. Pour plus d’informations, consultez CREATE FULLTEXT INDEX et ALTER FULLTEXT INDEX.

Cette section présente les analyseurs de mots et les générateurs de formes dérivées, et explique comment Full-Text Recherche utilise l’identificateur de code de langage (LCID) du langage au niveau des colonnes.

Introduction aux analyseurs de mots et aux générateurs de formes dérivées

SQL Server inclut une famille complète d’analyseurs de mots et de générateurs de formes dérivées. Microsoft Natural Language Group (NLG) implémente et prend en charge ces composants linguistiques.

Les analyseurs de mots offrent les avantages suivants :

  • Robustesse

    Les tests montrent que les analyseurs de mots sont robustes dans les environnements de requête à haute pression.

  • Sécurité

    Les analyseurs de mots sont activés par défaut dans SQL Server. Nous recommandons vivement que les composants externes tels que les analyseurs lexicaux et filtres soient signés afin d’améliorer la sécurité globale et la robustesse de SQL Server. Vous pouvez configurer le texte intégral pour vérifier que ces composants sont signés comme suit :

    EXECUTE sp_fulltext_service 'verify_signature';
    
  • Qualité

    Les tests internes montrent que les analyseurs de mots fournissent une meilleure qualité sémantique que les analyseurs de mots précédents. Cela augmente l'exactitude de rappel.

  • Pour couvrir une longue liste de langues, les analyseurs lexicaux sont inclus d’emblée dans SQL Server et sont activés par défaut.

Pour obtenir la liste des langues pour lesquelles SQL Server inclut un analyseur de mots et des générateurs de formes dérivées, consultez sys.fulltext_languages.

Comment Full-Text Recherche utilise le nom du langage au niveau des colonnes

Lorsque vous créez un index de recherche en texte intégral, vous devez spécifier un nom de langue valide pour chaque colonne. Si un nom de langue est valide mais n’est pas retourné par l’affichage catalogue sys.fulltext_languages , Full-Text Recherche revient au nom de langue disponible le plus proche de la même famille de langues, le cas échéant. Sinon, Full-Text Search revient à l’analyseur de mots neutre. Ce comportement de repli peut affecter l'exactitude de rappel. Par conséquent, nous vous recommandons vivement de spécifier un nom de langue valide et disponible pour chaque colonne lors de la création d'un index de recherche en texte intégral.

Notes

Le LCID est appliqué à tous les types de données pouvant faire l’objet d’une indexation de texte intégral (par exemple char ou nchar). Si l’ordre de tri d’une colonne de type char, varcharou text est défini à l’aide d’une langue différente de la langue identifiée par le LCID, ce dernier est néanmoins utilisé durant l’indexation de recherche en texte intégral et l’interrogation de ces colonnes.

Rupture de mot

Un analyseur lexical crée des jetons dans le texte indexé à partir des limites des mots, qui sont spécifiques aux langues. Par conséquent, le comportement d'analyse lexicale diffère d'une langue à l'autre. Si vous utilisez une langue, xpour indexer plusieurs langues {x, yet z}, certains du comportement peuvent entraîner des résultats inattendus. Par exemple, un tiret (-) ou une virgule (,) peut être un élément de saut de mot qui est jeté dans une langue, mais pas dans une autre. Un comportement de génération de formes dérivées rarement inattendu peut également se produire parce qu'un mot donné peut être dérivé différemment dans une autre langue. Par exemple, en anglais, les limites des mots sont généralement fixées par des espaces blancs ou un signe de ponctuation. Dans d’autres langues, telles que l’allemand, les mots ou les caractères, peuvent être combinés. Par conséquent, la langue au niveau des colonnes que vous choisissez doit représenter la langue que vous prévoyez de stocker dans les lignes de cette colonne.

Langues occidentales

Pour la famille occidentale de langues, si vous ne savez pas quelles langues seront stockées dans une colonne, ou si vous prévoyez que plusieurs langues soient stockées, une solution de contournement générale consiste à utiliser le analyseur de mots pour la langue la plus complexe susceptible d’être stockée dans la colonne.

Par exemple, vous pouvez vous attendre à stocker du contenu anglais, espagnol et allemand dans une seule colonne. Ces trois langues occidentales possèdent des modèles de rupture de mots similaires, avec les modèles allemands étant les plus complexes. Par conséquent, un bon choix dans ce cas serait d'utiliser l'analyseur lexical allemand, qui doit être en mesure de traiter le texte anglais et espagnol correctement. Par contre, il se peut que l'analyseur lexical anglais ne puisse pas traiter parfaitement le texte allemand à cause des mots composés allemands.

L’utilisation du analyseur de mots de la langue la plus complexe dans une famille de langues ne garantit pas l’indexation parfaite de chaque langue de la famille. Les cas d’angle peuvent exister dans lesquels le analyseur de mots le plus complexe ne peut pas gérer correctement le texte écrit dans une autre langue.

Langues non occidentales

Pour les langues non occidentales (comme le chinois, le japonais, l’hindi, etc.), la solution de contournement précédente ne fonctionne pas nécessairement pour des raisons linguistiques. Pour les langues non occidentales, considérez l'une des solutions de contournement suivantes :

  • Pour les langues de familles différentes

    Si une colonne peut contenir des langues complètement différentes, par exemple l'espagnol et le japonais, pensez à stocker le contenu de langues différentes dans des colonnes séparées. Cette séparation vous permet d’utiliser l’analyseur de mots spécifique à la langue pour chaque colonne. Si vous choisissez cette solution et que vous ne connaissez pas la langue de la requête à l'heure de la requête, vous pouvez devoir lancer la requête par rapport aux deux colonnes afin de faire en sorte que la requête recherche la bonne ligne ou le bon document.

  • Pour le contenu binaire (par exemple, les documents Microsoft Word)

    Lorsque le contenu indexé est de type binaire , le filtre de recherche Full-Text qui traite le contenu textuel avant de l’envoyer à l’analyseur de mots peut respecter des balises de langue spécifiques existantes dans le fichier binaire. Dans ce cas, au moment de l’indexation, le filtre émet le LCID approprié pour un document ou une section d’un document. Le moteur Full-Text appelle ensuite l’analyseur de mots pour la langue avec ce LCID. Toutefois, après avoir indexé un contenu multilingue, nous vous recommandons de vérifier que le contenu a été indexé correctement.

  • Pour un contenu de texte brut

    Lorsque votre contenu est du texte brut, vous pouvez le convertir en type de données xml et ajouter les balises de langue qui indiquent la langue qui correspond à chaque document ou section de document spécifique. Pour que cette option fonctionne toutefois, vous devez connaître la langue avant l'indexation de recherche en texte intégral.

Recherche de radical

Une autre considération à prendre en compte lors du choix de votre langage au niveau des colonnes est la recherche d’un résultat. La recherche dans les requêtes de texte intégral est le processus de recherche de toutes les formes dérivées (inflectionnelles) d’un mot dans une langue particulière. Lorsque vous utilisez un analyseur lexical générique pour traiter plusieurs langues, le processus de recherche de radical fonctionne uniquement pour la langue spécifiée pour la colonne, et non pour d'autres langues dans la colonne. Par exemple, les souches allemandes ne fonctionnent pas pour l’anglais ou l’espagnol (et ainsi de suite). Cela peut affecter votre rappel, selon la langue que vous choisissez au moment de la requête.

Un autre point à prendre en considération dans le choix de la langue est lié au mode de représentation des données. Pour les données qui ne sont pas stockées dans une colonne varbinary(max), aucun filtrage spécial n’est effectué. À la place, le texte est généralement traité tel quel par le composant de séparation des mots.

Les analyseurs lexicaux sont, aussi, principalement conçus pour traiter le texte écrit. Par conséquent, si vous avez un type de balisage (tel que HTML) sur votre texte, vous risquez de ne pas obtenir une grande précision linguistique pendant l’indexation et la recherche. Dans ce cas, vous avez deux choix : la méthode préférée consiste simplement à stocker les données de texte dans une colonne varbinary(max) et à indiquer son type de document afin qu’il puisse être filtré. S’il ne s’agit pas d’une option, vous pouvez envisager d’utiliser l’analyseur de mots neutres et, si possible, d’ajouter des données de balisage (telles que « br » en HTML) à vos listes de mots parasites.

Notes

La recherche de base de langage n’entre pas en jeu lorsque vous spécifiez la langue neutre.

Spécifier une langue au niveau des colonnes non par défaut dans une requête en texte intégral

Par défaut, dans SQL Server, Full-Text Recherche analyse les termes de requête à l’aide de la langue spécifiée pour chaque colonne incluse dans la clause de texte intégral. Pour remplacer ce comportement, spécifiez une langue autre que par défaut au moment de la requête. Pour les langues prises en charge dont les ressources sont installées, la LANGUAGE <language_term> clause d’une requête CONTAINS, CONTAINSTABLE, FREETEXT OU FREETEXTTABLE peut être utilisée pour spécifier la langue utilisée pour la rupture, la recherche de mots, le dictionnaire des synonymes et le traitement des mots vides des termes de la requête.