Partager via


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

Lors de la création d’un index de recherche en texte intégral, vous devez spécifier une langue au niveau des colonnes pour la colonne indexée. L’analyseur de mots et les générateurs de formes dérivées de la langue spécifiée seront utilisés par les requêtes de texte intégral sur la colonne. Il existe quelques éléments à prendre en compte lors du choix de la langue de colonne lors de la création d’un index de recherche en texte intégral. Ces considérations concernent la façon dont votre texte est tokenisé, puis indexé par Full-Text Moteur.

Remarque

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

Support linguistique dans la recherche Full-Text

Cette section présente les analyseurs de mots et les générateurs de formes dérivées, et explique comment la recherche en texte intégral utilise le LCID du langage au niveau des colonnes.

Introduction aux segmentateurs de mots et aux lemmatiseurs

SQL Server 2008 et versions ultérieures incluent une nouvelle famille complète d’analyseurs de texte et de lemmatiseurs qui sont nettement meilleurs que ceux précédemment disponibles dans SQL Server.

Remarque

Microsoft Natural Language Group (MS NLG) a implémenté et prend en charge les nouveaux composants linguistiques.

Les nouveaux analyseurs de mots offrent les avantages suivants :

  • Robustesse

    Les tests ont montré que les nouveaux analyseurs de mots sont robustes dans les environnements de requête à haute pression.

  • Sécurité

    Les nouveaux décomposeurs de mots sont activés par défaut dans SQL Server, grâce aux améliorations de sécurité des composants linguistiques. Nous vous recommandons vivement de signer des composants externes tels que des analyseurs de mots et des filtres pour 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 :

    EXEC sp_fulltext_service 'verify_signature';  
    
  • Qualité

    Les analyseurs de mots ont été repensés, et les tests ont montré que les nouveaux analyseurs de mots offrent une meilleure qualité sémantique que les précédents. Cela augmente la précision du rappel.

  • La couverture d’une vaste liste de langues et les analyseurs de mots sont inclus dans SQL Server, prêt à l'emploi et activés par défaut.

Pour obtenir la liste des langues pour lesquelles SQL Server inclut un décomposeur de mots et des lemmatiseurs, consultez sys.fulltext_languages (Transact-SQL).

Comment la recherche Full-Text utilise le nom de la langue Column-Level

Lors de la création d’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 (Transact-SQL), la recherche en texte intégral revient au nom de langue disponible le plus proche de la même famille de langues, le cas échéant. Sinon, la recherche en texte intégral revient à l’analyseur de mots neutres. Ce comportement de secours peut affecter la précision du rappel de données. 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.

Remarque

Le LCID est utilisé pour tous les types de données éligibles à l'indexation en texte intégral, tels que char ou nchar. Si l'ordre de tri d'une colonne de type char, varchar, ou text est défini avec un paramètre de langue différent de celui identifié par le LCID, le LCID est tout de même utilisé pendant l'indexation et l'interrogation en texte intégral de ces colonnes.

Découpage de mots

Un séparateur de mots segmente le texte lors de l'indexation sur les frontières des mots, qui sont spécifiques à la langue. Par conséquent, le comportement de segmentation des mots varie selon les langues. Si vous utilisez une langue, x, pour indexer un certain nombre de langues {x, y et ,z}, certains du comportement peuvent entraîner des résultats inattendus. Par exemple, un tiret (-) ou une virgule (,) peut être un élément de séparation des mots qui pourrait être ignoré dans une langue, mais pas dans une autre. De plus, un comportement de radicalisation inattendu peut se produire rarement, car un mot donné peut être radicalisé différemment selon les langues. Par exemple, dans la langue anglaise, les limites de mots sont généralement des espaces blancs ou une forme 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 associée aux colonnes que vous choisissez doit représenter la langue que vous attendez voir stockée 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 attendez que plusieurs d’entre elles soient stockées, une solution de contournement générale consiste à utiliser le analyseur de mots pour la langue la plus complexe qui peut ê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 très similaires de rupture de mots, avec les modèles allemands étant les plus complexes. Par conséquent, un bon choix est ce cas consiste à utiliser le analyseur de mots allemands, qui devrait être en mesure de traiter correctement le texte anglais et espagnol. En revanche, le analyseur de mots anglais peut ne pas traiter parfaitement le texte allemand en raison des mots composés de l’allemand.

Notez que 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 particuliers peuvent exister dans lesquels l'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 ci-dessus ne fonctionne pas nécessairement, pour des raisons linguistiques. Pour les langues non occidentales, envisagez l’une des solutions de contournement suivantes :

  • Pour les langues de différentes familles

    Si une colonne peut contenir des langues considérablement différentes, par exemple, l’espagnol et le japonais, envisagez de stocker le contenu de différentes langues dans des colonnes distinctes. Cela vous permettrait d’utiliser l’analyseur de mots spécifique à la langue pour chaque colonne. Si vous choisissez cette solution et que vous ne connaissez pas le langage de requête au moment de la requête, vous devrez peut-être émettre la requête sur les deux colonnes pour vous assurer que la requête trouve la ligne ou le document approprié.

  • Pour le contenu binaire (tels que les documents Microsoft Word)

    Lorsque le contenu indexé est de binary type, le filtre de recherche en texte intégral 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 de Full-Text appelle ensuite l'analyseur de mots pour la langue avec ce LCID. Toutefois, après l’indexation du contenu multilingue, nous vous recommandons de vérifier que le contenu a été correctement indexé.

  • Pour le contenu en texte brut

    Lorsque votre contenu est un texte brut, vous pouvez le convertir en xml type de données et ajouter des balises de langue qui indiquent la langue correspondant à chaque section de document ou de document spécifique. Pour que cela fonctionne, toutefois, vous devez connaître la langue avant l’indexation de texte intégral.

Recherche de radical

Un autre point à prendre en compte lors du choix de votre langage au niveau des colonnes est la lemmatisation. Le stemming 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 de mots générique pour traiter plusieurs langues, le processus de recherche de résultat fonctionne uniquement pour la langue spécifiée pour la colonne, et non pour les autres langues de la colonne. Par exemple, les lemmatiseurs allemands ne fonctionnent pas pour l’anglais ou l’espagnol, et cetera. Cela peut affecter votre rappel en fonction de la langue que vous choisissez au moment de la requête.

Effet du type de colonne sur la recherche Full-Text

Une autre considération dans le choix du langage est liée à la façon dont les données sont représentées. Pour les données qui ne sont pas stockées dans varbinary(max) la colonne, aucun filtrage spécial n’est effectué. Au lieu de cela, le texte est généralement passé par le composant cassant le mot as-is.

En outre, les analyseurs de mots sont conçus principalement 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 varbinary(max) la colonne 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 un séparateur de mots neutre et, si possible, d’ajouter des données de balisage (telles que « br » en HTML) à vos listes de mots à ignorer.

Remarque

Le découpage linguistique n'est pas pris en compte lorsque vous spécifiez la langue neutre.

Spécification d’un langage de Column-Level non par défaut dans une requête Full-Text

Par défaut, dans SQL Server, la recherche en texte intégral 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 un langage non défini au moment de la requête. Pour les langues prises en charge dont les ressources sont installées, la clause LANGUAGE language_term d'une requête CONTAINS, CONTAINSTABLE, FREETEXT ou FREETEXTTABLE peut être utilisée pour spécifier la langue employée pour la séparation des mots, la lemmatisation, le dictionnaire des synonymes et la gestion des mots vides des termes de la requête.

Voir aussi

CONTIENT (Transact-SQL)
CONTAINSTABLE (Transact-SQL)
Types de données (Transact-SQL)
FREETEXT (Transact-SQL)
FREETEXTTABLE (Transact-SQL)
Configurer et gérer des filtres pour la recherche
sp_fulltext_service (Transact-SQL)
sys.fulltext_languages (Transact-SQL)
Configurer et gérer les analyseurs de mots et les lemmatiseurs pour la recherche