sys.dm_fts_parser (Transact-SQL)

S'applique à : SQL Server

Retourne le résultat final de la tokenisation après l’application d’un analyseur de mots donné, du dictionnaire des synonymes et de la combinaison de mots vides à une entrée de chaîne de requête. Le résultat de la segmentation du texte en unités lexicales équivaut à la sortie du Moteur d'indexation et de recherche en texte intégral pour la chaîne de requête spécifiée.

sys.dm_fts_parser est une fonction de gestion dynamique.

Syntaxe

sys.dm_fts_parser ( 'query_string' , lcid , stoplist_id , accent_sensitivity )

Arguments

query_string

Requête à analyser. query_string peut être une chaîne de chaînes prise en charge de la syntaxe CONTAINS. Par exemple, vous pouvez inclure des formes fléchies, un dictionnaire des synonymes et des opérateurs logiques.

lcid

Identificateur de paramètres régionaux (LCID) de l’analyseur de mots à utiliser pour analyser query_string.

stoplist_id

ID de la liste de mots, le cas échéant, à utiliser par le disjoncteur de mots identifié par lcid. stoplist_id est int. Si vous spécifiez « NULL », aucune liste de mots vides n’est utilisée. Si vous spécifiez 0, la liste de mots vides système est utilisée.

Un ID de liste de mots vides est unique dans une base de données. Pour obtenir l’ID de liste de mots vides d’un index de recherche en texte intégral sur une table donnée, utilisez l’affichage catalogue sys.fulltext_indexes.

accent_sensitivity

Valeur booléenne qui indique si la recherche en texte intégral respecte ou non les signes diacritiques. accent_sensitivity est bit, avec l’une des valeurs suivantes :

Valeur La sensibilité aux accents est...
0 Insensible

Les mots tels que « café » et « cafe » sont traités de la même manière.
1 Sensible

Les mots tels que « café » et « cafe » ne sont pas traités de la même manière.

Remarque

Pour afficher le paramètre actuel de cette valeur pour un catalogue de texte intégral, exécutez l’instruction Transact-SQL suivante : SELECT fulltextcatalogproperty('<catalog_name>', 'AccentSensitivity');.

Table retournée

Nom de la colonne Type de données Description
mot clé varbinary(128) Représentation hexadécimale d'un mot clé donné retournée par un analyseur lexical. Cette représentation permet de stocker le mot clé dans l'index de recherche en texte intégral. Cette valeur n’est pas lisible par l’homme, mais il est utile de relier un mot clé donné à la sortie retournée par d’autres vues de gestion dynamique qui retournent le contenu d’un index de recherche en texte intégral, comme sys.dm_fts_index_keywords et sys.dm_fts_index_keywords_by_document.

Remarque : 0xFF représente le caractère spécial qui indique la fin d’un fichier ou d’un jeu de données.
group_id int Contient une valeur entière qui est utile pour différencier le groupe logique à partir duquel un terme donné a été généré. Par exemple, « Server AND DB OR FORMSOF(THESAURUS, DB)" » produit les valeurs group_id suivantes en anglais :

1 : Serveur
2 : Base de données
3 : Base de données
phrase_id int Contient une valeur entière qui est utile pour différencier les cas dans lesquels les formes alternatives de mots composés, tels que le texte intégral, sont émises par l'analyseur lexical. Il peut arriver qu'en présence de mots composés (« multi-million ») des formes alternatives soient émises par l'analyseur lexical. Ces formes alternatives (expressions) doivent parfois être différenciées.

Par exemple, « multi-million » produit les valeurs phrase_id suivantes en anglais :

1 pour multi
1 pour million
2 pour multimillion
occurrence int Indique l'ordre de chaque terme dans le résultat de l'analyse. Par exemple, pour l'expression « SQL Server query processor », l'occurrence contiendrait les valeurs d'occurrence suivantes pour les termes de l'expression, en anglais :

1 pour SQL
2 pour Server
3 pour query
4 pour processor
special_term nvarchar(4000) Contient des informations sur les caractéristiques du terme émis par l'analyseur lexical, informations qui peuvent être l'une des suivantes :

- Correspondance exacte
- Mot de bruit
- Fin de phrase
- Fin du paragraphe
- Fin du chapitre
display_term nvarchar(4000) Contient la forme explicite du mot clé. Comme avec les fonctions conçues pour accéder au contenu de l'index de recherche en texte intégral, ce terme affiché peut ne pas être identique au terme d'origine en raison des limitations inhérentes à la dénormalisation. Toutefois, il doit être suffisamment précis pour vous permettre de l'identifier à partir de l'entrée d'origine.
expansion_type int Contient des informations sur la nature de l'expansion d'un terme donné, informations qui peuvent être l'une des suivantes :

0 = Cas de mot unique
2 = Expansion inflectionnelle
4 = Expansion/remplacement du dictionnaire des synonymes

Par exemple, considérez un cas dans lequel le dictionnaire des synonymes définit run comme expansion de jog :

<expansion>
<sub>run</sub>
<sub>jog</sub>
</expansion>

Le terme FORMSOF (FREETEXT, run) génère la sortie suivante :

run avec expansion_type = 0
runs avec expansion_type = 2
running avec expansion_type = 2
ran avec expansion_type = 2
jog avec expansion_type = 4
source_term nvarchar(4000) Terme ou expression à partir duquel un terme donné à été généré ou analysé. Par exemple, une requête sur le '"word breakers" AND stemmers' produit les valeurs de source_term suivantes en anglais :

word breakers pour le display_term word
word breakers pour le display_term breakers
stemmers pour le display_term stemmers

Notes

sys.dm_fts_parserprend en charge la syntaxe et les fonctionnalités des prédicats de texte intégral, tels que CONTAINS et FREETEXT, et les fonctions, telles que CONTAINSTABLE et FREETEXTTABLE.

Utiliser Unicode pour analyser des caractères spéciaux

Lorsque vous analysez une chaîne de requête, sys.dm_fts_parser utilise le classement de la base de données à laquelle vous êtes connecté, sauf si vous spécifiez la chaîne de requête en tant qu’Unicode. Par conséquent, pour une chaîne non Unicode qui contient des caractères spéciaux, tels que ü ou ç, la sortie peut être inattendue, en fonction du classement de la base de données. Pour traiter une chaîne de requête indépendamment du classement de base de données, préfixez la chaîne avec N, autrement dit, N'query_string'.

Pour plus d’informations, consultez C. Afficher la sortie d’une chaîne qui contient des caractères spéciaux plus loin dans cet article.

Quand utiliser sys.dm_fts_parser

sys.dm_fts_parser peut être puissant à des fins de débogage. Certaines utilisations parmi les plus fréquents sont décrites ci-dessous.

  • Pour comprendre comment un analyseur lexical donné traite une entrée donnée

    Lorsqu'une requête retourne des résultats inattendus, une cause probable est la manière dont l'analyseur lexical analyse et décompose les données. En utilisant sys.dm_fts_parser, vous découvrez le résultat qu’un analyseur de mots passe à l’index de recherche en texte intégral. En outre, vous pouvez voir quels termes sont des mots vides, qui ne sont pas recherchés dans l’index de recherche en texte intégral. Si un terme est un mot vide pour une langue donnée dépend du fait qu’il se trouve dans la liste de mots vides spécifié par la valeur stoplist_id déclarée dans la fonction.

    L’indicateur de sensibilité aux accents vous permet de voir comment l’analyseur de mots analyse l’entrée, en ayant à l’esprit ses informations de confidentialité d’accentuation.

  • Pour comprendre le fonctionnement du générateur de formes dérivées sur une entrée donnée

    Vous pouvez déterminer comment l'analyseur lexical et le générateur de formes dérivées analysent un terme de requête et ses formes dérivées en spécifiant une requête CONTAINS ou CONTAINSTABLE qui contient la clause FORMSOF suivante :

    FORMSOF( INFLECTIONAL, query_term )
    

    Les résultats vous indiquent les termes qui sont passés à l'index de recherche en texte intégral.

  • Pour comprendre comment le dictionnaire des synonymes étend ou remplace tout ou partie de l'entrée

    Vous pouvez également spécifier :

    FORMSOF( THESAURUS, query_term )
    

    Les résultats de cette requête montrent comment l'analyseur lexical et le dictionnaire des synonymes interagissent pour le terme de requête. Vous pouvez voir l'expansion ou les remplacements du dictionnaire des synonymes et identifier la requête obtenue et effectivement émise sur l'index de recherche en texte intégral.

    Si l’utilisateur rencontre des problèmes :

    FORMSOF( FREETEXT, query_term )
    

    Les fonctionnalités d’inflection et de dictionnaire des synonymes ont lieu automatiquement.

Outre les scénarios d’utilisation précédents, sys.dm_fts_parser vous pouvez comprendre et résoudre de nombreux autres problèmes liés à la requête en texte intégral.

autorisations

Nécessite l’autorisation CREATE FULLTEXT CATALOG et les droits d’accès à la liste de mots vides spécifié.

Exemples

R. Afficher la sortie d’un analyseur de mots donné pour un mot clé ou une expression

L'exemple suivant retourne la sortie produite par l'analyseur lexical anglais, dont le LCID est 1033, utilisé sans liste de mots vides sur la chaîne de requête suivante :

The Microsoft business analysis

Le respect des accents est désactivé.

SELECT * FROM sys.dm_fts_parser (' "The Microsoft business analysis" ', 1033, 0, 0);

B. Afficher la sortie d’un analyseur de mots donné dans le contexte du filtrage de liste de mots vides

L'exemple suivant retourne la sortie produite par l'analyseur lexical anglais, dont le LCID est 1033, utilisé avec une liste de mots vides anglaise, dont l'ID est 77, sur la chaîne de requête suivante :

"The Microsoft business analysis" OR "MS revenue"

Le respect des accents est désactivé.

SELECT * FROM sys.dm_fts_parser (' "The Microsoft business analysis"  OR " MS revenue" ', 1033, 77, 0);

C. Afficher la sortie d’une chaîne qui contient des caractères spéciaux

L'exemple suivant utilise Unicode pour analyser la chaîne suivante :

français

L'exemple spécifie le LCID pour la langue française, 1036 et l'ID d'une liste de mots vides définie par l'utilisateur, 5 Le respect des accents est activé.

SELECT * FROM sys.dm_fts_parser(N'français', 1036, 5, 1);

Voir aussi

Étapes suivantes