sys.dm_fts_parser (Transact-SQL)

Retourne le dernier résultat de segmentation du texte en unités lexicales après avoir appliqué une combinaison donnée d'analyseur lexical, de dictionnaire des synonymes et de liste de mots vides à l'entrée d'une 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 type string prise en charge par la syntaxe de 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 lexical à utiliser pour analyser query_string.

  • stoplist_id
    ID de la liste de mots vides, le cas échéant, que l'analyseur lexical identifié par lcid doit utiliser. stoplist_id est de type 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 la liste de mots vides pour 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 de type bit, avec l'une des valeurs suivantes :

    Valeur

    Respecte les accents ?

    0

    Non

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

    1

    Oui

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

    Notes

    Pour consulter le paramétrage 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

keyword

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 explicite, mais elle permet d'associer 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, tel que sys.dm_fts_index_keywords et sys.dm_fts_index_keywords_by_document.

RemarqueRemarque
OxFF représente le caractère spécial qui indique la fin d'un fichier ou d'un dataset.

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 :

group_id display_term
1Serveur
2DB
3DB

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 :

phrase_id display_term
1 multi
1 million
2 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 », occurrence contiendrait les valeurs occurrence suivantes pour les termes de l'expression, en anglais :

occurrence display_term
1 SQL
2 Server
3 query
4 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 :

Concordance exacte

Mot parasite

Fin de phrase

Fin de paragraphe

Fin de 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 fléchie

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 '"word breakers" AND stemmers' produit les valeurs source_term suivantes en anglais :

source_term display_term
analyseurs lexicauxlexicaux
analyseurs lexicauxanalyseurs
stemmersstemmers

Notes

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

Utilisation d'Unicode pour l'analyse 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é, à moins que vous spécifiiez la chaîne de requête comme Unicode. Par conséquent, la sortie peut être inattendue pour une chaîne non-Unicode qui contient caractères spéciaux, tels que ü ou ç, selon le classement de la base de données. Pour traiter indépendamment une chaîne de requête 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. Affichage de la sortie d'une chaîne qui contient des caractères spéciaux », plus loin dans cette rubrique.

Quand utiliser sys.dm_fts_parser

sys.dm_fts_parser peut être très puissant dans le cadre d'un 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 lexical passe à l'index de recherche en texte intégral. En outre, vous pouvez voir quels sont les termes utilisés en tant que mots vides, qui ne sont pas recherchés dans l'index de recherche en texte intégral. Un terme est un mot vide pour une langue donnée s'il figure dans la liste de mots vides spécifiée par la valeur stoplist_id déclarée dans la fonction.

    Notez également l'indicateur de respect des accents, qui permet à l'utilisateur de voir comment l'analyseur lexical analyse l'entrée en ayant à l'esprit les informations de respect des accents.

  • 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.

    Notez que si l'utilisateur émet :

    FORMSOF( FREETEXT, query_term )
    

    les fonctionnalités des formes fléchies et du dictionnaire des synonymes opèrent automatiquement.

En plus des scénarios d'utilisation précédents, sys.dm_fts_parser peut être d'une aide précieuse pour comprendre et résoudre nombre d'autres problèmes liés à la requête de texte intégral.

Autorisations

Requiert l'appartenance au rôle serveur fixe sysadmin et des droits d'accès à la liste de mots vides spécifiée.

Exemples

A. Affichage de la sortie d'un analyseur lexical 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. Affichage de la sortie d'un analyseur lexical donné dans le contexte de 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. Affichage de 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);