Condividi tramite


sys.dm_fts_parser (Transact-SQL)

Restituisce il risultato della tokenizzazione finale dopo avere applicato una combinazione specifica di word breaker, thesaurus ed elenco di parole non significative all'input di una stringa di query. Il risultato della tokenizzazione è equivalente all'output del motore di ricerca full-text per la stringa di query specificata.

sys.dm_fts_parser è una funzione a gestione dinamica.

Sintassi

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

Argomenti

  • query_string
    Query da analizzare. query_string può essere una catena di stringhe che supportano la sintassi CONTAINS. È possibile ad esempio includere forme flessive, un thesaurus e operatori logici.

  • lcid
    Identificatore delle impostazioni locali (LCID) del word breaker da utilizzare per l'analisi di query_string.

  • stoplist_id
    ID dell'elenco delle parole non significative, se presente, che il word breaker identificato da lcid deve utilizzare. stoplist_id è un valore int. Se si specifica NULL, non viene utilizzato alcun elenco di parole non significative. Se si specifica 0, viene utilizzato l'elemento STOPLIST di sistema.

    L'ID di un elenco di parole non significative è univoco all'interno di un database. Per ottenere l'ID di un elenco di parole non significative per un indice full-text in una tabella specifica , utilizzare la vista del catalogo sys.fulltext_indexes.

  • accent_sensitivity
    Valore booleano che controlla se la ricerca full-text supporta o meno la distinzione relativa ai segni diacritici. accent_sensitivity è un bit e può assumere uno dei valori seguenti:

    Valore

    Distinzione caratteri accentati/non accentati

    0

    Non attiva

    Parole del tipo "café" e "cafe" vengono considerate in modo identico.

    1

    Attiva

    Parole del tipo "café" e "cafe" vengono considerate in modo diverso.

    Nota

    Per visualizzare l'impostazione corrente di questo valore per un catalogo full-text, eseguire l'istruzione Transact-SQL seguente: SELECT fulltextcatalogproperty('catalog_name', 'AccentSensitivity');.

Tabella restituita

Nome colonna

Tipo di dati

Descrizione

keyword

varbinary(128)

Rappresentazione esadecimale di una parola chiave specificata restituita da un word breaker. Tale rappresentazione viene utilizzata per archiviare la parola chiave nell'indice full-text. Questo valore non è leggibile, ma è utile per correlare una parola chiave specificata all'output restituito da altre viste a gestione dinamica che restituiscono il contenuto di un indice full-text, ad esempio sys.dm_fts_index_keywords e sys.dm_fts_index_keywords_by_document.

NotaNota
OxFF rappresenta il carattere speciale che indica la fine di un file o di un set di dati.

group_id

int

Contiene un valore integer utile per differenziare il gruppo logico dal quale è stato generato un termine specifico. Ad esempio, 'Server AND DB OR FORMSOF(THESAURUS, DB)"' produce i valori seguenti group_id in inglese:

group_id display_term
1Server
2DB
3DB

phrase_id

int

Contiene un valore integer utile per differenziare i casi in cui il word breaker invia forme alternative di parole composte, come full-text. In presenza di parole composte, ad esempio "multi-million", a volte il word breaker invia forme alternative. In alcuni casi tali forme alternative (frasi) devono essere differenziate.

Ad esempio, 'multi-million' produce i seguenti valori phrase_id in inglese:

phrase_id display_term
1 multi
1 million
2 multimillion

occurrence

int

Indica l'ordine di ogni termine nel risultato dell'analisi. Ad esempio, per la frase "SQL Server query processor" in occurrence sarebbero presenti i seguenti valori occurrence per i termini, in inglese:

occurrence display_term
1 SQL
2 Server
3 query
4 processor

special_term

nvarchar(4000)

Contiene informazioni sulle caratteristiche del termine inviato dal word breaker, tra cui:

Corrispondenza esatta

Parola non significativa

Fine di frase

Fine di paragrafo

Fine di capitolo

display_term

nvarchar(4000)

Contiene la forma leggibile della parola chiave. Analogamente alle funzioni progettate per accedere al contenuto dell'indice full-text, il termine visualizzato potrebbe non essere identico al termine originale a causa della limitazione della denormalizzazione, ma dovrebbe essere tuttavia abbastanza preciso per consentire di identificarlo partendo dall'input originale.

expansion_type

int

Contiene informazioni sulla natura dell'espansione di un termine specificato. I valori possono essere i seguenti:

0 = singola parola

2 = espansione flessiva

4 = espansione/sostituzione del thesaurus

Si consideri ad esempio un caso in cui il thesaurus definisce il termine "run" come un'espansione di jog:

<expansion>

<sub>run</sub>

<sub>jog</sub>

</expansion>

Il termine FORMSOF (FREETEXT, run) genera l'output seguente:

run con expansion_type=0

runs con expansion_type=2

running con expansion_type=2

ran con expansion_type=2

jog con expansion_type=4

source_term

nvarchar(4000)

Termine o frase da cui viene generato o analizzato un termine specifico. Una query eseguita su '"word breakers" AND stemmers' produce ad esempio i seguenti valori source_term in inglese:

source_term display_term
word breakerword
word breakerbreakers
stemmersstemmers

Osservazioni

sys.dm_fts_parser supporta la sintassi e le caratteristiche di predicati full-text, quali CONTAINS e FREETEXT e di funzioni, quali CONTAINSTABLE e FREETEXTTABLE.

Utilizzo di Unicode per l'analisi di caratteri speciali

Quando si utilizza una stringa di query, sys.dm_fts_parser utilizza le regole di confronto del database cui si è connessi, a meno che la stringa di query non sia stata specificata con Unicode. Di conseguenza, per una stringa non Unicode che contiene caratteri speciali, ad esempio ü oppure ç, l'output potrebbe essere imprevisto, a seconda delle regole di confronto del database. Per elaborare una stringa di query indipendentemente dalle regole di confronto del database, anteporre il prefisso N alla stringa, ad esempio N'query_string'.

Per ulteriori informazioni, vedere "C. Visualizzazione dell'output di una stringa che contiene caratteri speciali" più avanti in questo argomento.

Utilizzo di sys.dm_fts_parser

sys.dm_fts_parser può essere molto potente al fine della correzione errori. Di seguito vengono riportati alcuni dei principali scenari di utilizzo:

  • Comprensione del modo in cui un word breaker considera un input specificato

    La restituzione di risultati imprevisti da parte di una query può essere probabilmente causata dal modo in cui il word breaker analizza e divide i dati. Se si utilizza sys.dm_fts_parser, è possibile individuare il risultato che un word breaker passa all'indice full-text. È inoltre possibile visualizzare quali termini sono parole non significative che non vengono ricercate nell'indice full-text. In una lingua specifica un termine è una parola non significativa se è presente nell'elenco di parole non significative specificato dal valore stoplist_id dichiarato nella funzione.

    Si noti inoltre il flag relativo alla distinzione tra caratteri accentati e non accentati, che consentirà all'utente di visualizzare il modo in cui il word breaker analizzerà l'input in base alle informazioni relative alla distinzione tra caratteri accentati e non accentati di cui dispone.

  • Comprensione del funzionamento dello stemmer su un input specificato

    Per individuare il modo in cui il word breaker e lo stemmer analizzano un termine della query e le relative forme di stemming, è possibile specificare una query CONTAINS o CONTAINSTABLE che contiene la clausola FORMSOF seguente:

    FORMSOF( INFLECTIONAL, query_term )
    

    I risultati indicano i termini che vengono passati all'indice full-text.

  • Comprensione del modo in cui il thesaurus espande o sostituisce tutto o parte dell'input

    È inoltre possibile specificare:

    FORMSOF( THESAURUS, query_term )
    

    I risultati di questa query indicano il modo in cui il word breaker e il thesaurus interagiscono per il termine della query. È possibile visualizzare l'espansione o le sostituzioni eseguite dal thesaurus e identificare la query risultante effettivamente inviata all'indice full-text.

    Si noti che se l'utente invia:

    FORMSOF( FREETEXT, query_term )
    

    Le funzionalità flessive e del thesaurus verranno eseguite automaticamente.

Oltre agli scenari di utilizzo precedenti, sys.dm_fts_parser può risultare estremamente utile nella comprensione e nella risoluzione di molti altri problemi relativi alla query full-text.

Autorizzazioni

È necessario appartenere al ruolo predefinito del server sysadmin e disporre dei diritti di accesso all'elenco di parole non significative specificato.

Esempi

A. Visualizzazione dell'output di un word breaker specifico per una parola chiave o una frase

Nell'esempio seguente viene restituito l'output relativo all'utilizzo del word breaker inglese, il cui LCID è 1033, e di nessun elenco di parole non significative sulla stringa di query seguente:

The Microsoft business analysis

La distinzione tra caratteri accentati e non accentati è disabilitata.

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

B. Visualizzazione dell'output di un word breaker specifico nel contesto di applicazione di filtri dell'elenco di parole non significative

Nell'esempio seguente viene restituito l'output relativo all'utilizzo del word breaker inglese, il cui LCID è 1033, e di un elenco di parole non significative, il cui ID è 77, sulla stringa di query seguente:

"The Microsoft business analysis" OR "MS revenue"

La distinzione tra caratteri accentati e non accentati è disabilitata.

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

C. Visualizzazione dell'output di una stringa che contiene caratteri speciali

Nell'esempio seguente viene utilizzato Unicode per analizzare la stringa in lingua francese seguente:

français

Nell'esempio viene specificato l'identificatore LCID per la lingua francese, 1036, e l'ID di un elenco di parole non significative definito dall'utente, 5 La distinzione tra caratteri accentati e non accentati è abilitata.

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