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. stoplist_id è di tipo 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 è di tipo bit e i possibili valori sono i 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.
|
||||||||||
group_id |
int |
Contiene un valore intero 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:
|
||||||||||
phrase_id |
int |
Contiene un valore intero 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:
|
||||||||||
occurrence |
int |
Indica l'ordine di ogni termine nel risultato dell'analisi. Per la frase "SQL Server query processor", ad esempio, in occurrence sarebbero contenuti i seguenti valori di occurrence per i termini nella frase, in Inglese:
|
||||||||||
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 di source_term in inglese:
|
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 a cui si è connessi, a meno che la stringa di query non sia stata specificata come 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ò risultare molto potente per le operazioni 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. 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ò facilitare significativamente 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);
Vedere anche
Riferimento
Funzioni e viste a gestione dinamica relative alla ricerca full-text e semantica (Transact-SQL)
Concetti
Ricerca full-text (SQL Server)
Configurazione e gestione di word breaker e stemmer per la ricerca
Configurare e gestire i file del thesaurus per la ricerca full-text
Esecuzione della query con ricerca Full-Text