ALTER FULLTEXT INDEX (Transact-SQL)
Modifica le proprietà di un indice full-text.
Sintassi
ALTER FULLTEXT INDEX ON table_name
{ ENABLE
| DISABLE
| SET CHANGE_TRACKING { MANUAL | AUTO | OFF }
| ADD ( column_name
[ TYPE COLUMN type_column_name ]
[ LANGUAGE language_term ] [,...n] )
[ WITH NO POPULATION ]
| DROP ( column_name [,...n] )
[ WITH NO POPULATION ]
| START { FULL | INCREMENTAL | UPDATE } POPULATION
| {STOP | PAUSE | RESUME } POPULATION
| SET STOPLIST { OFF| SYSTEM | stoplist_name }
[ WITH NO POPULATION ]
}
[;]
Argomenti
table_name
Nome della tabella o della vista indicizzata contenente la colonna o le colonne incluse nell'indice full-text. I nomi dei proprietari del database e della tabella sono facoltativi.ENABLE | DISABLE
Indica a SQL Server se raccogliere i dati dell'indice full-text per table_name. ENABLE attiva l'indice full-text, DISABLE lo disattiva. La tabella non supporterà query full-text mentre l'indice è disabilitato.Disabilitare un indice full-text consente di disattivare il rilevamento delle modifiche conservando l'indice full-text, che può essere riattivato utilizzando ENABLE in qualsiasi momento. Quando l'indice full-text è disabilitato, i relativi metadati vengono mantenuti nelle tabelle di sistema. Se l'opzione CHANGE_TRACKING è abilitata (aggiornamento manuale o automatico) quando l'indice full-text è disabilitato, lo stato dell'indice viene bloccato, eventuali ricerche per indicizzazione in corso vengono arrestate e le nuove modifiche apportate ai dati della tabella non vengono registrate o propagate nell'indice.
SET CHANGE_TRACKING {MANUAL | AUTO | OFF}
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.Nota
Per informazioni sull'interazione del rilevamento delle modifiche e del parametro WITH NO POPULATION, vedere la sezione "Osservazioni" più avanti in questo argomento.
MANUAL
Specifica che le modifiche rilevate verranno 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
Specifica che SQL Server non manterrà un elenco delle modifiche apportate ai dati indicizzati.ADD | DROP column_name
Specifica le colonne da aggiungere o eliminare in un indice full-text. Le colonne specificate devono essere di tipo char, varchar, nchar, nvarchar, text, ntext, image, xml, varbinary o varbinary(max).Utilizzare la clausola DROP solo per colonne abilitate in precedenza per l'indicizzazione full-text.
Utilizzare TYPE COLUMN e LANGUAGE con la clausola ADD per impostare queste proprietà sul valore di column_name. Se si aggiunge una colonna, è necessario ripopolare l'indice full-text della tabella per consentire il corretto funzionamento delle query full-text su tale colonna.
Nota
Il popolamento dell'indice full-text dopo l'aggiunta o l'eliminazione di una colonna varia a seconda che sia abilitato il rilevamento delle modifiche e sia specificato WITH NO POPULATION. Per ulteriori informazioni, vedere la sezione "Osservazioni" più avanti in questo argomento.
TYPE COLUMN type_column_name
Specifica il nome di una colonna della tabella, type_column_name, utilizzato per contenere il tipo di documento per un documento varbinary, 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). Il tipo di questa colonna deve essere char, nchar, varchar o nvarchar.Specificare TYPE COLUMN type_column_name solo se column_name specifica una colonna varbinary, 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 Filtri di ricerca full-text.
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 si specifica language_term, la lingua rappresentata dall'argomento verrà applicata a tutti gli elementi della condizione di ricerca. Se non viene specificato alcun valore, verrà utilizzata la lingua predefinita della funzionalità full-text per l'istanza di SQL Server.
Utilizzare la stored procedure sp_configure per recuperare informazioni sulla lingua predefinita della funzionalità full-text per l'istanza di SQL Server. Per ulteriori informazioni, vedere Opzione default full-text language.
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 integer, 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 restituirà un errore.
Utilizzare la risorsa per la lingua neutra (0x0) per le colonne 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. Per i documenti archiviati in colonne di tipo XML o BLOB, in fase di indicizzazione verrà utilizzata la codifica di 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.
[ ,...n]
Indica la possibilità di specificare più colonne nelle clausole ADD o DROP. Se si specificano più colonne, utilizzare la virgola come separatore.WITH NO POPULATION
Specifica che l'indice full-text non verrà popolato dopo un'operazione ADD o DROP per le colonne o un'operazione SET STOPLIST. L'indice verrà popolato solo se si esegue un comando START...POPULATION.Se si specifica NO POPULATION, SQL Server non popola un indice. L'indice viene popolato solo quando si esegue un comando ALTER FULLTEXT INDEX...START POPULATION. Se non si specifica NO POPULATION, SQL Server popola l'indice.
Se l'opzione CHANGE_TRACKING è abilitata e si specifica WITH NO POPULATION, SQL Server restituisce un errore. Se l'opzione CHANGE_TRACKING è abilitata e non si specifica WITH NO POPULATION, SQL Server esegue un popolamento completo dell'indice.
Nota
Per ulteriori informazioni sull'interazione del rilevamento delle modifiche e del parametro WITH NO POPULATION, vedere la sezione "Osservazioni" di seguito in questo argomento.
START {FULL|INCREMENTAL|UPDATE} POPULATION
Indica a SQL Server di avviare il popolamento dell'indice full-text per table_name. Se il popolamento dell'indice full-text è già in corso, SQL Server restituisce un avviso senza avviare un nuovo popolamento.-
FULL
Specifica che devono essere recuperate tutte le righe della tabella per l'indicizzazione full-text, anche se le righe sono già state indicizzate.INCREMENTAL
Specifica che per l'indicizzazione full-text devono essere recuperate solo le righe modificate dopo l'ultimo popolamento. È possibile applicare INCREMENTAL solo se la tabella include una colonna di tipo timestamp. Se una tabella nel catalogo full-text non include una colonna di tipo timestamp, per la tabella viene eseguito un popolamento FULL.UPDATE
Specifica che devono essere elaborate tutte le operazioni di inserimento, aggiornamento o eliminazione eseguite dopo l'ultimo aggiornamento dell'indice con rilevamento delle modifiche. È necessario che il popolamento con rilevamento delle modifiche sia abilitato per una tabella, ma l'indice ad aggiornamento in background o il rilevamento automatico delle modifiche non deve essere attivato.
{STOP | PAUSE | RESUME } POPULATION
Arresta o sospende qualsiasi popolamento in corso oppure arresta o riprende qualsiasi popolamento sospeso.STOP POPULATION non arresta il rilevamento automatico delle modifiche o l'indice ad aggiornamento in background. Per arrestare il rilevamento delle modifiche, utilizzare SET CHANGE_TRACKING OFF.
PAUSE POPULATION e RESUME POPULATION possono essere utilizzati soltanto per popolamenti completi. Non sono rilevanti per altri tipi di popolamento poiché le ricerche per indicizzazione vengono riprese negli altri popolamenti dal punto in cui sono state arrestate.
SET STOPLIST { OFF| SYSTEM | stoplist_name }
Cambia l'elenco di parole non significative full-text associato all'indice, se presente.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.
Per ulteriori informazioni, vedere Parole non significative ed elenchi di parole non significative.
Osservazioni
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 Indice full-text su una colonna XML.
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 dell'indice full-text.
Autorizzazioni
L'utente deve disporre dell'autorizzazione ALTER per la tabella o la vista indicizzata oppure essere un membro del ruolo predefinito del server sysadmin o del ruolo predefinito del database db_ddladmin o db_owner.
Se SET STOPLIST è specificato, l'utente deve disporre dell'autorizzazione REFERENCES nell'elenco di parole non significative. Questa autorizzazione può essere concessa dal proprietario di STOPLIST. Per concedere l'autorizzazione REFERENCES sono inoltre necessarie le autorizzazioni ALTER FULLTEXT CATALOG.
Nota
Agli utenti viene concessa l'autorizzazione REFERENCE per l'elenco di parole non significative predefinito fornito con SQL Server.
Esempi
A. Impostazione del rilevamento manuale delle modifiche
Nell'esempio seguente viene impostato il rilevamento manuale delle modifiche nell'indice full-text nella tabella JobCandidate del database AdventureWorks2008R2.
USE AdventureWorks2008R2;
GO
ALTER FULLTEXT INDEX ON HumanResources.JobCandidate
SET CHANGE_TRACKING MANUAL;
GO
B. Avvio di un popolamento completo
Nell'esempio seguente viene avviato un popolamento completo dell'indice full-text nella tabella JobCandidate del database AdventureWorks2008R2.
USE AdventureWorks2008R2;
GO
ALTER FULLTEXT INDEX ON HumanResources.JobCandidate
START FULL POPULATION;
GO
Vedere anche