Condividi tramite


ALTER FULLTEXT INDEX (Transact-SQL)

Si applica a: SQL Server Database SQL di Azure Istanza gestita di SQL di Azure

Modifica le proprietà di un indice full-text in SQL Server.

Convenzioni relative alla sintassi Transact-SQL

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 ]
           [ STATISTICAL_SEMANTICS ]
           [ , ...n ]
         )
     [ WITH NO POPULATION ]
   | ALTER COLUMN column_name
     { ADD | DROP } STATISTICAL_SEMANTICS
     [ 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 ]
   | SET SEARCH PROPERTY LIST [ = ] { OFF | property_list_name }
     [ WITH NO POPULATION ]
   }
[ ; ]

Argomenti

table_name

Nome della tabella o della vista indicizzata che contiene 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 dati dell'indice full-text per table_name. ENABLE consente di attivare l'indice full-text, DISABLE di disabilitarlo. La tabella non supporta le 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 CHANGE_TRACKING si trova nello stato abilitato (aggiornamento automatico o manuale) quando l'indice full-text è disabilitato, lo stato dell'indice si blocca, eventuali arresti di ricerca per indicizzazione in corso e le nuove modifiche ai dati della tabella non vengono rilevate o propagate all'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 dei dati tramite WRITETEXT e UPDATETEXT non vengono riflesse nell'indice full-text e non vengono rilevate con il rilevamento delle modifiche.

  • MANUAL

    Specifica che le modifiche rilevate vengono propagate manualmente chiamando ALTER FULLTEXT INDEX ... Istruzione Transact-SQL START UPDATE POPULATION (popolamento manuale). Per chiamare periodicamente questa istruzione Transact-SQL, è possibile usare SQL Server Agent.

  • AUTO

    Specifica che le modifiche rilevate vengono propagate automaticamente man mano che i dati vengono modificati 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 mantiene un elenco di modifiche ai dati indicizzati.

ADD | DROP column_name

Specifica le colonne da aggiungere o eliminare in un indice full-text. La colonna o le colonne 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.

Usare TYPE COLUMN e LANGUAGE con la clausola ADD per impostare queste proprietà su 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 altre informazioni, vedere Interazioni del rilevamento delle modifiche con NO POPULATION.

TYPE COLUMN type_column_name

Specifica il nome di una colonna di tabella, type_column_name, utilizzata 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, .xlse così via). La colonna del tipo deve essere di tipo char, nchar, varcharo 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 usa l'abbreviazione nella colonna di tipo di ogni riga di tabella per identificare il filtro di ricerca full-text da usare 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 altre informazioni, vedere Configurazione e gestione di filtri per la ricerca.

LANGUAGE language_term

Lingua dei dati archiviati in column_name.

language_term è facoltativo e può essere specificato come 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 viene applicata a tutti gli elementi della condizione di ricerca. Se non viene specificato alcun valore, verrà usata la lingua predefinita della funzionalità full-text per l'istanza di SQL Server.

Usare la sp_configure stored procedure per accedere alle informazioni sulla lingua full-text predefinita dell'istanza di SQL Server.

Se specificato come stringa, language_term corrisponde al valore della alias colonna nella tabella di sys.syslanguages sistema. La stringa deve essere racchiusa tra virgolette singole chiuse, 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 dell'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), verrà convertito in Unicode da SQL Server.

Per la lingua specificata in language_term è necessario abilitare risorse quali word breaker e stemmer. Se tali risorse non supportano la lingua specificata, SQL Server restituisce 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, la codifica del linguaggio all'interno del documento viene utilizzata in fase di indicizzazione. Nelle colonne XML, ad esempio, l'attributo xml:lang nei documenti XML identifica il linguaggio. 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

Si applica a: SQL Server 2012 (11.x) e versioni successive.

Consente di creare la frase chiave aggiuntiva e gli indici di somiglianza dei documenti che fanno parte dell'indicizzazione semantica statistica. Per altre informazioni, vedere Ricerca semantica (SQL Server).

[ , ... n ]

Indica che è possibile specificare più colonne per la clausola ADD, ALTER 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 di colonna o un'operazione SET STOPLIST. L'indice viene popolato solo se l'utente esegue un'istruzione START... Comando POPULATION.

Quando 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. Quando NON è specificato 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 CHANGE_TRACKING è abilitato e WITH NO POPULATION non è specificato, SQL Server esegue un popolamento completo sull'indice.

{ADD | DROP } STATISTICAL_SEMANTICS

Si applica a: SQL Server 2012 (11.x) e versioni successive.

Consente di abilitare o disabilitare l'indicizzazione semantica statistica per le colonne specificate. Per altre informazioni, vedere Ricerca semantica (SQL Server).

START { FULL | INCREMENTAL | UPDATE } POPULATION

Indica a SQL Server di avviare il popolamento dell'indice full-text di table_name. Se è già in corso un popolamento di indici full-text, SQL Server restituisce un avviso e non avvia un nuovo popolamento.

  • FULL

    Specifica che ogni riga della tabella viene recuperata per l'indicizzazione full-text anche se le righe sono già state indicizzate.

  • INCREMENTAL

    Specifica che solo le righe modificate dall'ultimo popolamento vengono recuperate per l'indicizzazione full-text. INCREMENTAL può essere applicato solo se la tabella ha una colonna di tipo timestamp. Se una tabella nel catalogo full-text non contiene una colonna del timestamp di tipo, la tabella viene sottoposta a 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. Il popolamento del rilevamento delle modifiche deve essere abilitato in una tabella, ma l'indice di 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 di 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 perché gli altri popolamenti riprendono le ricerche per indicizzazione da dove la ricerca per indicizzazione è stata arrestata.

SET STOPLIST { OFF | SYSTEM | stoplist_name }

Cambia l'elenco di parole non significative full-text associato all'indice, se presente.

  • OFF

    Specifica che nessun elenco di parole non significative è associato all'indice full-text.

  • 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 altre informazioni, vedere Configurare e gestire parole non significative ed elenchi di parole non significative per la ricerca full-text.

SET SEARCH PROPERTY LIST { OFF | property_list_name } [ WITH NO POPULATION ]

Si applica a: SQL Server 2012 (11.x) e versioni successive.

Modifica l'elenco delle proprietà di ricerca associate all'indice, se presente.

  • OFF

    Specifica che nessun elenco di proprietà è associato all'indice full-text. Quando si disattiva l'elenco delle proprietà di ricerca di un indice full-text (ALTER FULLTEXT INDEX ... SET SEARCH PROPERTY LIST OFF), la ricerca di proprietà nella tabella di base non è più possibile.

    Per impostazione predefinita, quando si disattiva un elenco delle proprietà di ricerca esistente, l'indice full-text viene ripopolato automaticamente. Se si specifica WITH NO POPULATION quando si disattiva l'elenco delle proprietà di ricerca, il ripopolamento automatico non si verifica. È tuttavia consigliabile eseguire un popolamento completo su questo indice full-text. Il ripopolamento dell'indice full-text comporta la rimozione dei metadati specifici di ogni proprietà di ricerca eliminata, rendendo più piccolo e più efficiente l'indice full-text.

  • property_list_name

    Specifica il nome dell'elenco delle proprietà di ricerca da associare all'indice full-text.

    L'aggiunta di un elenco delle proprietà di ricerca a un indice full-text richiede il ripopolamento dell'indice per indicizzare le proprietà di ricerca registrate per l'elenco delle proprietà di ricerca associato. Se si specifica WITH NO POPULATION quando si aggiunge l'elenco di proprietà di ricerca, è necessario eseguire un popolamento nell'indice in un momento appropriato.

Importante

Se l'indice full-text è stato in precedenza associato a una ricerca diversa, è necessario ricostruire l'elenco delle proprietà per rendere coerente lo stato dell'indice. L'indice viene troncato immediatamente e rimane vuoto fino al termine del popolamento completo. Per altre informazioni, vedere La modifica dell'elenco delle proprietà di ricerca richiede la ricompilazione dell'indice.

Nota

È possibile associare un elenco delle proprietà di ricerca specificato a più indici full-text nello stesso database.

Trovare gli elenchi di proprietà di ricerca nel database corrente

Per altre informazioni sugli elenchi delle proprietà di ricerca, vedere Eseguire ricerche nelle proprietà dei documenti con elenchi delle proprietà di ricerca.

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 degli elementi vengono utilizzati come limiti dei token. Sono supportati documenti e frammenti XML o HTML ben formati e contenenti più lingue. Per altre 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.

ALTER FULLTEXT INDEX non può essere inserito all'interno di una transazione utente. Questa istruzione deve essere eseguita nella propria transazione implicita.

Per altre informazioni sugli indici full-text, vedere Creare e gestire indici full-text.

Interazioni del rilevamento delle modifiche e del parametro 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 tale interazione.

Rilevamento modifiche WITH NO POPULATION Risultato
Non abilitata Non specificato Viene eseguito un popolamento completo dell'indice.
Non abilitata Specificato L'indice non viene popolato fino a quando non viene eseguita un'istruzione ALTER FULLTEXT INDEX...START POPULATION.
Attivata Specificato Viene generato un errore e l'indice non viene modificato.
Attivata Non specificato Viene eseguito un popolamento completo dell'indice.

Per altre informazioni sul popolamento degli indici full-text, vedere Popolare gli indici full-text.

Modificare l'elenco delle proprietà di ricerca causa la ricompilazione dell'indice

La prima volta in cui un indice full-text viene associato a un elenco delle proprietà di ricerca, è necessario ripopolare l'indice per indicizzare i termini di ricerca specifici delle proprietà. I dati dell'indice esistenti non vengono troncati.

Se tuttavia si associa l'indice full-text a un elenco delle proprietà diverso, l'indice viene ricompilato. La ricompilazione immediata comporta il troncamento dell'indice full-text, ovvero la rimozione di tutti i dati esistenti, e l'indice deve essere ripopolato. Nel corso del popolamento, le query full-text sulla tabella di base eseguono ricerche solo nelle righe della tabella che sono già state indicizzate dal popolamento. I dati dell'indice ripopolato includono i metadati delle proprietà registrate dell'elenco delle proprietà di ricerca appena aggiunte.

Scenari che comportano la ricompilazione includono:

  • Passare direttamente a un elenco di proprietà di ricerca diverso (vedere "Scenario A", più avanti in questa sezione).

  • Disattivare l'elenco delle proprietà di ricerca e successivamente associare l'indice a qualsiasi elenco di proprietà di ricerca (vedere "Scenario B" più avanti in questa sezione).

Nota

Per altre informazioni sul funzionamento della ricerca full-text con gli elenchi delle proprietà di ricerca, vedere Eseguire ricerche nelle proprietà dei documenti con elenchi delle proprietà di ricerca. Per informazioni sui popolamenti completi, vedere Popolare gli indici full-text.

Scenario A: Passare direttamente a un elenco di proprietà di ricerca diverso

  1. Un indice full-text viene creato in table_1 con un elenco delle proprietà di ricerca spl_1:

    CREATE FULLTEXT INDEX ON table_1 (column_name) KEY INDEX unique_key_index
        WITH SEARCH PROPERTY LIST=spl_1,
        CHANGE_TRACKING OFF, NO POPULATION;
    
  2. Viene eseguito un popolamento completo sull'indice full-text:

    ALTER FULLTEXT INDEX ON table_1 START FULL POPULATION;
    
  3. L'indice full-text viene associato in seguito a un elenco delle proprietà di ricerca diverso, spl_2, utilizzando l'istruzione seguente:

    ALTER FULLTEXT INDEX ON table_1 SET SEARCH PROPERTY LIST spl_2;
    

    Questa istruzione comporta un popolamento completo, ovvero il comportamento predefinito. Tuttavia, prima di avviare questo popolamento, il motore di ricerca full-text tronca automaticamente l'indice.

Scenario B: Disattivare l'elenco delle proprietà di ricerca e successivamente associare l'indice a qualsiasi elenco di proprietà di ricerca

  1. Un indice full-text viene creato in table_1 con un elenco delle proprietà di ricerca spl_1, seguito da un popolamento completo automatico (comportamento predefinito):

    CREATE FULLTEXT INDEX ON table_1 (column_name) KEY INDEX unique_key_index
        WITH SEARCH PROPERTY LIST=spl_1;
    
  2. L'elenco delle proprietà di ricerca viene disattivato, come illustrato di seguito:

    ALTER FULLTEXT INDEX ON table_1
        SET SEARCH PROPERTY LIST OFF WITH NO POPULATION;
    
  3. L'indice full-text è ancora una volta associato allo stesso elenco delle proprietà di ricerca o a uno diverso.

    Ad esempio, l'istruzione seguente riassocia l'indice full-text con l'elenco delle proprietà di ricerca originale, spl_1:

    ALTER FULLTEXT INDEX ON table_1 SET SEARCH PROPERTY LIST spl_1;
    

    Questa istruzione avvia un popolamento completo, ovvero il comportamento predefinito.

    Nota

    Potrebbe essere necessario eseguire la ricompilazione per un elenco delle proprietà di ricerca diverso, ad esempio spl_2.

Autorizzazioni

L'utente deve avere l'autorizzazione ALTER per la tabella o la vista indicizzata oppure deve essere un membro del ruolo predefinito del server sysadmin o del ruolo predefinito del database db_ddladmin o db_owner.

Se si specifica SET STOPLIST, l'utente deve disporre dell'autorizzazione REFERENCES per l'elenco di parole non significative. Se si specifica SET SEARCH PROPERTY LIST, l'utente deve disporre dell'autorizzazione REFERENCES per l'elenco delle proprietà di ricerca. Il proprietario dell'elenco di parole non significative o dell'elenco delle proprietà di ricerca specificato può concedere l'autorizzazione REFERENCES, se il proprietario dispone delle autorizzazioni ALTER FULLTEXT CATALOG.

Nota

Agli utenti viene concessa l'autorizzazione REFERENCES per l'elenco di parole non significative predefinito fornito con SQL Server.

Esempi

R. Impostare il rilevamento delle modifiche manuali

Nell'esempio seguente viene impostato il rilevamento manuale delle modifiche per l'indice full-text nella tabella JobCandidate.

USE AdventureWorks2022;
GO
ALTER FULLTEXT INDEX ON HumanResources.JobCandidate
   SET CHANGE_TRACKING MANUAL;
GO

B. Associare un elenco di proprietà a un indice full-text

Si applica a: SQL Server 2012 (11.x) e versioni successive.

Nell'esempio seguente l'elenco delle proprietà DocumentPropertyList viene associato all'indice full-text della tabella Production.Document. Questa istruzione ALTER FULLTEXT INDEX avvia un popolamento completo, che corrisponde al comportamento predefinito della clausola SET SEARCH PROPERTY LIST.

Nota

Per un esempio in cui viene creato l'elenco di proprietà DocumentPropertyList, vedere CREATE SEARCH PROPERTY LIST (Transact-SQL).

USE AdventureWorks2022;
GO
ALTER FULLTEXT INDEX ON Production.Document
   SET SEARCH PROPERTY LIST DocumentPropertyList;
GO

C. Rimuovere un elenco di proprietà di ricerca

Si applica a: SQL Server 2012 (11.x) e versioni successive.

Nell'esempio seguente viene rimosso l'elenco delle proprietà DocumentPropertyList dall'indice full-text della tabella Production.Document. In questo esempio non c'è fretta di rimuovere le proprietà dall'indice, quindi viene specificata l'opzione WITH NO POPULATION. Tuttavia, la ricerca a livello di proprietà non è più consentita in questo indice full-text.

USE AdventureWorks2022;
GO
ALTER FULLTEXT INDEX ON Production.Document
   SET SEARCH PROPERTY LIST OFF WITH NO POPULATION;
GO

D. Avviare un popolamento completo

Nell'esempio seguente viene avviato un popolamento completo nell'indice full-text nella tabella JobCandidate.

USE AdventureWorks2022;
GO
ALTER FULLTEXT INDEX ON HumanResources.JobCandidate
   START FULL POPULATION;
GO

Vedi anche