Mots ayant des décimales ne sont pas retournés par un analyseur lexical anglais dans SQL Server

Symptômes

Dans un séparateur de mots en langue anglaise, vous utilisez un contenu d’index pour l’index de texte intégral contenant des mots ayant des décimales, par exemple.325,.434,.646. Lorsque vous essayez de localiser des lignes dans l’index de recherche, sur la valeur décimale (par exemple,.325),, aucune ligne n’est retournée.

Solution de contournement

Pour contourner ce problème, appliquez l’une des méthodes suivantes :

  • Utiliser le séparateur de mots neutre.

  • Placez un zéro avant la virgule décimale lorsque vous utilisez un séparateur de word en anglais. Par exemple, utilisez « 0.325 » au lieu de «. 325" dans votre recherche. Le séparateur de mots anglais gère correctement l’indexation et de recherche lorsqu’il rencontre des zéros non significatifs.

Plus d'informations

Procédure pour reproduire le problème

  1. Création d’un index de texte intégral pour créer un index contenant des mots ayant des décimales, par exemple.325,.434,.646 et ainsi de suite.

  2. Pour effectuer une recherche sur ces valeurs à l’aide d’un analyseur lexical anglais dont le LCID est 1033, utilisez la requête de texte intégral suivante :

    Select * from sys.dm_fts_parser('"Ring, .325 x .434 .646 Platinum"', 1033, 0,0)


    Résultats

    mot clé

    group_id

    phrase_id

    occurrence

    special_term

    display_term

    Remarques

    0x007700610073006800650072

    1

    0

    1

    Correspondance exacte

    Anneau

    0x002E003300310033

    1

    0

    2

    Correspondance exacte

    .325

    Conserve le séparateur décimal

    0x006E006E00300064003300310033

    1

    0

    2

    Correspondance exacte

    nn0d325

    0x0078

    1

    0

    3

    Mot parasite

    x

    0x006E006E003400330038

    1

    0

    4

    Correspondance exacte

    .434

    Conserve le séparateur décimal

    0x006E006E003400330038

    1

    0

    4

    Correspondance exacte

    nn434

    0x003000340036

    1

    0

    5

    Correspondance exacte

    .646

    Conserve le séparateur décimal

    0x006E006E00340036

    1

    0

    5

    Correspondance exacte

    nn46

    0x007300680069006D

    1

    0

    6

    Correspondance exacte

    Platinum



  3. Essayez d’effectuer une recherche sur «. 325 » (y compris la virgule décimale) :

    Select * from sys.dm_fts_parser('.325', 1033, 0,0) Using English word breaker to specify the ".325" search term.

    Remarque Nous n’obtiennent pas une correspondance.

    Résultats

    mot clé

    group_id

    phrase_id

    special_term

    display_term

    Remarques

    0x003300310033

    1

    0

    1

    Correspondance exacte

    325

    Supprime le séparateur décimal lors de la recherche et 325 <>.325, et aucune ligne n’est renvoyée

    0x006E006E003300310033

    1

    0

    1

    Correspondance exacte

    nn325



    Dans cet exemple, si vous entrez «. 325 » comme valeur à rechercher, ne renvoie aucune ligne. C’est pourquoi nous avons indexé des données en conservant la virgule décimale, mais la coupure de mots anglaise supprime le point décimal pendant le processus de recherche. Par conséquent, nous avons Rechercher par inadvertance 325 au lieu de.325, et aucune correspondance n’est trouvée.

    Recherche dans un index de texte intégral à l’aide d’un analyseur lexical en anglais pour les mots comportant des décimales des fonctionne correctement si vous utilisez le séparateur de mots neutre.

  4. Exécutez la requête suivante en utilisant le séparateur de mots neutre :

    Select * from sys.dm_fts_parser('"Ring, .325 x .434 .646 Platinum"', 0, 0,0)


    Résultats

    mot clé

    group_id

    phrase_id

    occurrence

    special_term

    display_term

    Remarques

    0x007700610073006800650072

    1

    0

    1

    Correspondance exacte

    Anneau

    0x002E003300310033

    1

    0

    2

    Correspondance exacte

    .325

    Conserve le séparateur décimal

    0x006E006E00300064003300310033

    1

    0

    2

    Correspondance exacte

    nn0d325

    0x0078

    1

    0

    3

    Mot parasite

    x

    0x002E003400330038

    1

    0

    4

    Correspondance exacte

    .434

    Conserve le séparateur décimal

    0x006E006E00300064003400330038

    1

    0

    4

    Correspondance exacte

    nn0d434

    0x002E003000340036

    1

    0

    5

    Correspondance exacte

    .646

    Conserve le séparateur décimal

    0x006E006E00300064003000340036

    1

    0

    5

    Correspondance exacte

    nn0d646

    0x007300680069006D

    1

    0

    6

    Correspondance exacte

    Platinum



    Désormais, la recherche sur «. 325 » fonctionne comme prévu.

    Select * from sys.dm_fts_parser('.325', 0, 0,0) Specifying Neutral word breaker.

    Résultats

    mot clé

    group_id

    phrase_id

    occurrence

    special_term

    display_term

    Remarques

    0x002E003300310033

    1

    0

    1

    Correspondance exacte

    .325

    0x006E006E00300064003300310033

    1

    0

    1

    Correspondance exacte

    nn0d325

État

Microsoft a confirmé l'existence de ce problème dans les produits Microsoft répertoriés dans la section « S'applique à ».

Besoin d’aide ?

Développez vos compétences
Découvrez des formations
Accédez aux nouvelles fonctionnalités en avant-première
Rejoindre Microsoft Insider

Ces informations vous ont-elles été utiles ?

Nous vous remercions pour vos commentaires.

Merci pour vos commentaires. Il serait vraisemblablement utile pour vous de contacter l’un de nos agents du support Office.

×