sys.dm_fts_parser (Transact-SQL)

Si applica a:SQL Server

Restituisce il risultato finale della tokenizzazione dopo l'applicazione di una determinata combinazione di word breaker, thesaurus e elenco di parole non significative a un input della 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 supporta la sintassi CONTAINS. È possibile ad esempio includere forme flessive, un thesaurus e operatori logici.

lcid

Identificatore delle impostazioni locali (LCID) del word breaker da usare per l'analisi query_string.

stoplist_id

ID dell'elenco di parole non significative, se presente, da utilizzare dal word breaker identificato da lcid. stoplist_id è int. Se si specifica 'NULL', non viene usato 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 elenco di parole non significative per un indice full-text in una determinata tabella, 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 è bit, con uno dei valori seguenti:

Valore La sensibilità accento è...
0 Non attiva

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

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 dall'utente, ma è utile per correlare una determinata parola chiave 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.

Nota:0xFF 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. 'Server AND DB OR FORMSOF(THESAURUS, DB)"' produce ad esempio i seguenti valori di group_id in inglese:

1: Server
2: DATABASE
3: DATABASE
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.

'multi-million' produce ad esempio i seguenti valori di phrase_id in inglese:

1 per multi
1 per million
2 per multimillion
occurrence int Indica l'ordine di ogni termine nel risultato dell'analisi. Per la frase "SQL Server query processor", ad esempio, in occurrence sarebbero presenti i seguenti valori di occorrenza per i termini, in inglese:

1 per SQL
2 per Server
3 per query
4 per processor
special_term nvarchar(4000) Contiene informazioni sulle caratteristiche del termine inviato dal word breaker, tra cui:

- Corrispondenza esatta
- Parola rumore
- Fine frase
- Fine del paragrafo
- Fine del 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 = Maiuscole/minuscole
2 = Espansione flesso
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. Ad esempio, una query su '"word breakers" AND stemmers' produce i valori di source_term seguenti in inglese:

word breakers per il display_termword
word breakers per il display_termbreakers
stemmers per il display_termstemmers

Osservazioni:

sys.dm_fts_parser supporta la sintassi e le funzionalità dei predicati full-text, ad esempio CONTAINS e FREETEXT, e funzioni, ad esempio CONTAINSTABLE e FREETEXTTABLE.

Usare Unicode per l'analisi di caratteri speciali

Quando si analizza una stringa di query, sys.dm_fts_parser usa le regole di confronto del database a cui si è connessi, a meno che non si specifichi la stringa di query come Unicode. Pertanto, per una stringa non Unicode contenente caratteri speciali, ad esempio ü o ç, 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 la stringa a N, ovvero, N'query_string'.

Per altre informazioni, vedere C. Visualizzare l'output di una stringa contenente caratteri speciali più avanti in questo articolo.

Quando usare sys.dm_fts_parser

sys.dm_fts_parser può essere potente a scopo di debug. 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 provocata dal modo in cui il word breaker analizza e divide i dati. Usando sys.dm_fts_parser, si individua il risultato che un word breaker passa all'indice full-text. È anche possibile vedere quali termini sono parole non significative, che non vengono eseguite ricerche nell'indice full-text. Se un termine è una parola non significativa per una determinata lingua, dipende dal fatto che si tratti dell'elenco di parole non significative specificato dal valore stoplist_id dichiarato nella funzione.

    Il flag di riservatezza principale consente di vedere come il word breaker analizza l'input, tenendo presente le informazioni di riservatezza accentato.

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

    Se l'utente ha problemi:

    FORMSOF( FREETEXT, query_term )
    

    Le funzionalità flessive e thesaurus vengono eseguite automaticamente.

Oltre agli scenari di utilizzo precedenti, sys.dm_fts_parser può essere utile per comprendere e risolvere in modo significativo molti altri problemi relativi alla query full-text.

Autorizzazioni

Richiede l'autorizzazione CREATE FULLTEXT CATALOG e i diritti di accesso per l'elenco di parole non significative specificato.

Esempi

R. Visualizzare l'output di un word breaker specificato 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. Visualizzare l'output di un word breaker specificato nel contesto del filtro 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. Visualizzare l'output di una stringa contenente 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);

Vedi anche

Passaggi successivi