Le parole con iniziale decimali non vengono restituite da delle parole inglesi in SQL Server

Sintomi

In un word breaker della lingua inglese, si utilizza un contenuto di indice di indice full-text che contiene le parole con iniziale decimali, ad esempio.325,.434,.646. Quando si tenta di individuare le righe dell'indice eseguendo una ricerca sul valore decimale (ad esempio,.325), nessuna riga vengono restituiti.

Soluzione alternativa

Per risolvere questo problema, utilizzare uno dei seguenti metodi:

  • Utilizzare il sillabatore neutro.

  • Inserire uno zero prima della virgola decimale quando si utilizzano delle parole in lingua inglese. Ad esempio, utilizzare "0.325" invece di ". 325" per la ricerca. Le parole inglesi gestisce correttamente l'indicizzazione e la ricerca quando rileva gli zeri iniziali.

Ulteriori informazioni

Procedura per riprodurre il problema

  1. Creare un indice full-text per creare un indice che contiene le parole con iniziale decimali, ad esempio.325,.434,.646 e così via.

  2. Utilizzare la seguente query full-text per la ricerca su questi valori utilizzando delle parole inglesi cui LCID è 1033:

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


    Risultati

    parola chiave

    group_id

    phrase_id

    occorrenza

    special_term

    display_term

    Note

    0x007700610073006800650072

    1

    0

    1

    Corrispondenza esatta

    Anello

    0x002E003300310033

    1

    0

    2

    Corrispondenza esatta

    .325

    Mantiene il separatore decimale

    0x006E006E00300064003300310033

    1

    0

    2

    Corrispondenza esatta

    nn0d325

    0x0078

    1

    0

    3

    Parola non significativa

    x

    0x006E006E003400330038

    1

    0

    4

    Corrispondenza esatta

    .434

    Mantiene il separatore decimale

    0x006E006E003400330038

    1

    0

    4

    Corrispondenza esatta

    nn434

    0x003000340036

    1

    0

    5

    Corrispondenza esatta

    .646

    Mantiene il separatore decimale

    0x006E006E00340036

    1

    0

    5

    Corrispondenza esatta

    nn46

    0x007300680069006D

    1

    0

    6

    Corrispondenza esatta

    Platinum



  3. Provare a eseguire la ricerca ". 325" (compresa la virgola decimale):

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

    Nota: Non si ottiene una corrispondenza.

    Risultati

    parola chiave

    group_id

    phrase_id

    special_term

    display_term

    Note

    0x003300310033

    1

    0

    1

    Corrispondenza esatta

    325

    Consente di rimuovere il separatore decimale durante la ricerca e 325 <>.325, nessuna riga restituita

    0x006E006E003300310033

    1

    0

    1

    Corrispondenza esatta

    nn325



    In questo esempio, se si immette ". 325" come valore di ricerca, viene restituita alcuna riga. In questo modo abbiamo i dati mantenendo il punto decimale, ma non in lingua inglese di word breaker rimuove la virgola decimale durante il processo di ricerca. Pertanto, si ricercano inavvertitamente 325 anziché.325, e non vengono trovate corrispondenze.

    La ricerca di un indice full-text utilizzando delle parole in lingua inglese per le parole con iniziale decimali funziona correttamente se si utilizza il sillabatore neutro.

  4. Mediante il sillabatore neutro, eseguire la query seguente:

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


    Risultati

    parola chiave

    group_id

    phrase_id

    occorrenza

    special_term

    display_term

    Note

    0x007700610073006800650072

    1

    0

    1

    Corrispondenza esatta

    Anello

    0x002E003300310033

    1

    0

    2

    Corrispondenza esatta

    .325

    Mantiene il separatore decimale

    0x006E006E00300064003300310033

    1

    0

    2

    Corrispondenza esatta

    nn0d325

    0x0078

    1

    0

    3

    Parola non significativa

    x

    0x002E003400330038

    1

    0

    4

    Corrispondenza esatta

    .434

    Mantiene il separatore decimale

    0x006E006E00300064003400330038

    1

    0

    4

    Corrispondenza esatta

    nn0d434

    0x002E003000340036

    1

    0

    5

    Corrispondenza esatta

    .646

    Mantiene il separatore decimale

    0x006E006E00300064003000340036

    1

    0

    5

    Corrispondenza esatta

    nn0d646

    0x007300680069006D

    1

    0

    6

    Corrispondenza esatta

    Platinum



    A questo punto, la ricerca di ". 325" funziona come previsto.

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

    Risultati

    parola chiave

    group_id

    phrase_id

    occorrenza

    special_term

    display_term

    Note

    0x002E003300310033

    1

    0

    1

    Corrispondenza esatta

    .325

    0x006E006E00300064003300310033

    1

    0

    1

    Corrispondenza esatta

    nn0d325

Stato

Microsoft ha confermato che questo è un problema dei prodotti Microsoft elencati nella sezione "Si applica a".

Serve aiuto?

Amplia le tue competenze
Esplora i corsi di formazione
Ottieni in anticipo le nuove caratteristiche
Partecipa a Microsoft Insider

Queste informazioni sono risultate utili?

Grazie per il feedback!

Grazie per il tuo feedback! Potrebbe essere utile metterti in contatto con uno dei nostri operatori del supporto di Office.

×