CREATE FULLTEXT INDEX (Transact-SQL)
Crea un indice full-text per una tabella o una vista indicizzata di un database. È consentito un solo indice full-text per tabella o vista indicizzata e ogni indice full-text viene applicato a una singola tabella o vista indicizzata.
Un indice full-text può contenere fino a 1024 colonne.
Convenzioni della sintassi Transact-SQL
Sintassi
CREATE FULLTEXT INDEX ON table_name
[ ( { column_name
[ TYPE COLUMN type_column_name ]
[ LANGUAGE language_term ]
[ STATISTICAL_SEMANTICS ]
} [ ,...n]
) ]
KEY INDEX index_name
[ ON <catalog_filegroup_option> ]
[ WITH [ ( ] <with_option> [ ,...n] [ ) ] ]
[;]
<catalog_filegroup_option>::=
{
fulltext_catalog_name
| ( fulltext_catalog_name, FILEGROUP filegroup_name )
| ( FILEGROUP filegroup_name, fulltext_catalog_name )
| ( FILEGROUP filegroup_name )
}
<with_option>::=
{
CHANGE_TRACKING [ = ] { MANUAL | AUTO | OFF [, NO POPULATION ] }
| STOPLIST [ = ] { OFF | SYSTEM | stoplist_name }
| SEARCH PROPERTY LIST [ = ] property_list_name
}
Argomenti
table_name
Nome della tabella o della vista indicizzata contenente la colonna o le colonne incluse nell'indice full-text.column_name
Nome della colonna inclusa nell'indice full-text. Per la ricerca full-text possono essere indicizzate solo le colonne di tipo char, varchar, nchar, nvarchar, text, ntext, image, xml e varbinary(max). Per specificare più colonne, ripetere la clausola column_name come indicato di seguito:CREATE FULLTEXT INDEX ON table_name (column_name1 […], column_name2 […]) …
TYPE COLUMN type_column_name
Specifica il nome di una colonna di tabella, type_column_name, utilizzato per contenere il tipo per un documento di tipo varbinary(max) o image. Questa colonna, nota come colonna di tipo, contiene un'estensione di file fornita dall'utente (doc, pdf, xls e così via). Questa colonna deve essere di tipo char, nchar, varchar o nvarchar.Specificare TYPE COLUMN type_column_name solo se column_name specifica una colonna varbinary(max) o image in cui i dati vengono archiviati come dati binari. In caso contrario, SQL Server restituisce un errore.
[!NOTA]
Durante l'indicizzazione il motore di ricerca full-text utilizza l'abbreviazione nella colonna di tipo di ogni riga di tabella per identificare il filtro di ricerca full-text da utilizzare per il documento in column_name. Il filtro carica il documento come flusso binario, rimuove le informazioni sulla formattazione e invia il testo dal documento al componente word breaker. Per ulteriori informazioni, vedere Configurazione e gestione di filtri per la ricerca.
LANGUAGE language_term
Lingua dei dati archiviati in column_name.language_term è facoltativo ed è possibile specificare un valore stringa, intero o esadecimale corrispondente all'identificatore delle impostazioni locali (LCID) di una lingua. Se non viene specificato alcun valore, viene utilizzata la lingua predefinita dell'istanza di SQL Server.
Se si specifica language_term, la lingua rappresentata viene utilizzata per indicizzare i dati archiviati nelle colonne di tipo char, nchar, varchar, nvarchar, text e ntext. Questa lingua corrisponde alla lingua predefinita utilizzata in fase di query se non viene specificato language_term in un predicato full-text per la colonna.
Se l'argomento language_term viene specificato come stringa, corrisponde al valore della colonna alias nella tabella di sistema syslanguages. La stringa deve essere racchiusa tra virgolette singole, come in ''language_term'. Se l'argomento language_term viene specificato come valore intero, corrisponde all'LCID effettivo che identifica la lingua. Se si specifica un valore esadecimale, language_term è 0x seguito dal valore esadecimale di LCID. Il valore esadecimale deve essere composto al massimo da otto cifre, zero iniziali inclusi.
Se il valore è in formato DBCS (Double-Byte Character Set), SQL Server lo convertirà in Unicode.
È necessario abilitare per la lingua specificata in language_term le risorse quali il word breaker e lo stemmer. Se tali risorse non supportano la lingua specificata, SQL Server restituisce un errore.
Utilizzare la stored procedure sp_configure per ottenere informazioni sulla lingua predefinita full-text dell'istanza di Microsoft SQL Server. Per ulteriori informazioni, vedere sp_configure (Transact-SQL).
Per le colonne di tipo non BLOB e non XML che contengono dati di testo in più lingue oppure nei casi in cui la lingua del testo archiviato nella colonna è sconosciuta, potrebbe essere appropriato utilizzare la risorsa per la lingua neutra (0x0). È tuttavia necessario considerare prima le possibili conseguenze derivanti dall'utilizzo di tale risorsa. Per informazioni sulle possibili soluzioni e conseguenze dell'utilizzo della risorsa per la lingua neutra (0x0), vedere Scelta di una lingua durante la creazione di un indice full-text.
Per i documenti archiviati in colonne di tipo XML o BLOB, in fase di indicizzazione viene utilizzata la codifica della lingua del documento. Nelle colonne XML, ad esempio, la lingua è identificata dall'attributo xml:lang nei documenti XML. In fase di query, il valore precedentemente specificato in language_term diventa la lingua predefinita per le query full-text, a meno che non si specifichi language_term all'interno di una query full-text.
STATISTICAL_SEMANTICS
Consente di creare la frase chiave aggiuntiva e gli indici di somiglianza dei documenti che fanno parte dell'indicizzazione semantica statistica. Per ulteriori informazioni, vedere Ricerca semantica (SQL Server).KEY INDEX index_name
Nome dell'indice di chiave univoca in table_name. KEY INDEX deve essere una colonna chiave singola univoca che non ammette i valori Null. Selezionare l'indice di chiave univoca più piccolo possibile per la chiave univoca full-text. Per prestazioni ottimali, si consiglia di utilizzare un tipo di dati integer per la chiave full-text.fulltext_catalog_name
Catalogo full-text utilizzato per l'indice full-text. Il catalogo deve esistere nel database corrente. Questa clausola è facoltativa. Se non viene specificata, viene utilizzato un catalogo predefinito. Se non esiste alcun catalogo predefinito, SQL Server restituisce un errore.FILEGROUP filegroup_name
Crea l'indice full-text specificato nel filegroup specificato. È necessario che il filegroup esista già. Se la clausola FILEGROUP non viene specificata, l'indice full-text viene posizionato nello stesso filegroup della tabella o della vista di base nel caso di una tabella non partizionata o nel filegroup primario nel caso di una tabella partizionata.CHANGE_TRACKING [ = ] { MANUAL | AUTO | OFF [ , NO POPULATION ] }
Specifica se le modifiche (aggiornamenti, eliminazioni o inserimenti) apportate alle colonne della tabella coperte dall'indice full-text verranno propagate da SQL Server all'indice full-text. Le modifiche apportate ai dati tramite WRITETEXT e UPDATETEXT non vengono riportate nell'indice full-text e pertanto non vengono registrate dalla funzione di rilevamento delle modifiche.MANUAL
Specifica che le modifiche rilevate devono essere propagate manualmente chiamando l'istruzione Transact-SQL ALTER FULLTEXT INDEX … START UPDATE POPULATION (popolamento manuale). Per chiamare questa istruzione Transact-SQL periodicamente, è possibile utilizzare SQL Server Agent.AUTO
Specifica che le modifiche rilevate verranno propagate automaticamente quando vengono modificati i dati nella tabella di base (popolamento automatico). Sebbene le modifiche vengano propagate automaticamente, tali modifiche potrebbero non risultare immediatamente nell'indice full-text. AUTO è l'impostazione predefinita.OFF [ , NO POPULATION]
Specifica che SQL Server non mantiene un elenco delle modifiche apportate ai dati indicizzati. Se non si specifica NO POPULATION, SQL Server popola l'indice completamente dopo che è stato creato.L'opzione NO POPULATION può essere utilizzata solo se l'impostazione di CHANGE_TRACKING è OFF. Se si specifica NO POPULATION, SQL Server non popola un indice dopo che è stato creato. L'indice viene popolato solo dopo avere eseguito il comando ALTER FULLTEXT INDEX con la clausola START FULL POPULATION o START INCREMENTAL POPULATION.
STOPLIST [ = ] { OFF | SYSTEM | stoplist_name }
Associa un elenco di parole non significative full-text all'indice. L'indice non viene popolato con alcun token che faccia parte dell'elenco di parole non significative specificato. Se non si specifica STOPLIST, SQL Server associa l'elenco di parole non significative full-text di sistema all'indice.OFF
Specifica che all'indice full-text non deve essere associato alcun elenco di parole non significative.SYSTEM
Specifica che per l'indice full-text deve essere utilizzato l'elemento STOPLIST full-text di sistema predefinito.stoplist_name
Specifica il nome dell'elenco di parole non significative da associare all'indice full-text.
SEARCH PROPERTY LIST [ = ] property_list_name
Associa un elenco di proprietà di ricerca all'indice.OFF
Specifica che all'indice full-text non deve essere associato alcun elenco di proprietà.property_list_name
Specifica il nome dell'elenco delle proprietà di ricerca da associare all'indice full-text.
Osservazioni
Per ulteriori informazioni sugli indici full-text, vedere Creazione e gestione di indici full-text.
Nelle colonne xml è possibile creare un indice full-text per indicizzare il contenuto degli elementi XML ignorando il markup XML. Ai valori di attributo viene applicata l'indicizzazione full-text a meno che non siano valori numerici. I tag elemento sono utilizzati come limiti del token. Sono supportati documenti e frammenti XML o HTML ben formati contenenti più lingue. Per ulteriori informazioni, vedere Utilizzo della ricerca full-text con colonne XML.
Si consiglia di utilizzare un tipo di dati integer per la colonna chiave indice per consentire l'ottimizzazione durante l'esecuzione della query.
Interazioni del rilevamento delle modifiche con NO POPULATION
Il popolamento dell'indice full-text dipende dal fatto che il rilevamento delle modifiche sia o meno abilitato e che si specifichi o meno WITH NO POPULATION nell'istruzione ALTER FULLTEXT INDEX. Nella tabella seguente è riepilogato il risultato di tali interazioni.
Rilevamento delle modifiche |
WITH NO POPULATION |
Risultato |
---|---|---|
Non abilitato |
Non specificato |
Viene eseguito il popolamento completo dell'indice. |
Non abilitato |
Specificato |
L'indice non viene popolato fino a quando non viene eseguita un'istruzione ALTER FULLTEXT INDEX...START POPULATION. |
Abilitato |
Specificato |
Viene generato un errore e l'indice non viene modificato. |
Abilitato |
Non specificato |
Viene eseguito un popolamento completo dell'indice. |
Per ulteriori informazioni sul popolamento degli indici full-text, vedere Popolamento degli indici full-text.
Autorizzazioni
L'utente deve disporre dell'autorizzazione REFERENCES nel catalogo full-text e dell'autorizzazione ALTER nella tabella o nella vista indicizzata oppure deve essere membro del ruolo predefinito del server sysadmin o del ruolo predefinito del database db_owner o db_ddladmin.
Se SET STOPLIST è specificato, l'utente deve disporre dell'autorizzazione REFERENCES nell'elenco di parole non significative specificato. Questa autorizzazione può essere concessa dal proprietario di STOPLIST.
[!NOTA]
Agli utenti viene concessa l'autorizzazione REFERENCE per l'elenco di parole non significative predefinito fornito con SQL Server.
Esempi
A.Creazione di un indice univoco, un catalogo full-text e un indice full-text
Nell'esempio seguente viene creato un indice univoco sulla colonna JobCandidateID della tabella HumanResources.JobCandidate del database di esempio AdventureWorks. Viene quindi creato un catalogo full-text predefinito, ft e infine viene creato un indice full-text sulla colonna Resume utilizzando il catalogo ft e l'elenco di parole non significative del sistema.
USE AdventureWorks;
GO
CREATE UNIQUE INDEX ui_ukJobCand ON HumanResources.JobCandidate(JobCandidateID);
CREATE FULLTEXT CATALOG ft AS DEFAULT;
CREATE FULLTEXT INDEX ON HumanResources.JobCandidate(Resume)
KEY INDEX ui_ukJobCand
WITH STOPLIST = SYSTEM;
GO
B.Creazione di un indice full-text su diverse colonne della tabella
Nell'esempio seguente viene creato un catalogo full-text, production_catalog, nel database di esempio AdventureWorks. Nell'esempio viene quindi creato un indice full-text che utilizza questo nuovo catalogo. L'indice full-text è sulle colonne ReviewerName, EmailAddress e Comments della tabella Production.ProductReview del database di esempio AdventureWorks. Per ogni colonna, nell'esempio viene specificato l'identificatore LCID dell'inglese, 1033, che identifica la lingua dei dati nelle colonne. Questo indice full-text utilizza un indice della chiave univoca esistente, PK_ProductReview_ProductReviewID. Come consigliato, questa chiave di indice è in una colonna di valori interi, ProductReviewID.
USE AdventureWorks;
GO
CREATE FULLTEXT CATALOG production_catalog;
GO
CREATE FULLTEXT INDEX ON Production.ProductReview
(
ReviewerName
Language 1033,
EmailAddress
Language 1033,
Comments
Language 1033
)
KEY INDEX PK_ProductReview_ProductReviewID
ON production_catalog;
GO
C.Creazione di un indice full-text con un elenco di proprietà di ricerca senza popolarlo
Nell'esempio seguente viene creato un indice full-text sulle colonne Title, DocumentSummary e Document della tabella Production.Document. Nell'esempio viene specificato l'identificatore LCID dell'inglese, 1033, che identifica la lingua dei dati delle colonne. Questo indice full-text utilizza il catalogo full-text predefinito e un indice della chiave univoca esistente, PK_Document_DocumentID. Come consigliato, questa chiave di indice è in una colonna di valori interi, DocumentID.
Nell'esempio viene inoltre specificato l'elenco di parole non significative SYSTEM. Specifica inoltre un elenco di proprietà di ricerca, DocumentPropertyList; per un esempio in cui viene creato questo elenco di proprietà, vedere CREATE SEARCH PROPERTY LIST (Transact-SQL).
Nell'esempio viene specificato che il rilevamento delle modifiche è disabilitato e non viene eseguito il popolamento. In un secondo momento, durante le ore di minore attività, nell'esempio viene utilizzata un'istruzione ALTER FULLTEXT INDEX per avviare il popolamento completo del nuovo indice e abilitare il rilevamento delle modifiche automatico.
USE AdventureWorks;
GO
CREATE FULLTEXT INDEX ON Production.Document
(
Title
Language 1033,
DocumentSummary
Language 1033,
Document
TYPE COLUMN FileExtension
Language 1033
)
KEY INDEX PK_Document_DocumentID
WITH STOPLIST = SYSTEM, SEARCH PROPERTY LIST = DocumentPropertyList, CHANGE_TRACKING OFF, NO POPULATION;
GO
In un secondo momento, in un orario di minore attività, l'indice viene popolato:
ALTER FULLTEXT INDEX ON Production.Document SET CHANGE_TRACKING AUTO;
GO
Vedere anche
Riferimento
ALTER FULLTEXT INDEX (Transact-SQL)
DROP FULLTEXT INDEX (Transact-SQL)
sys.fulltext_indexes (Transact-SQL)
Concetti
Creazione e gestione di indici full-text
Ricerca full-text (SQL Server)
Eseguire ricerche nelle proprietà dei documenti con elenchi delle proprietà di ricerca