Condividi tramite


ALTER FULLTEXT INDEX (Transact-SQL)

Modifica le proprietà di un indice full-text.

Icona di collegamento a un argomento Convenzioni della 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 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 consente di attivare l'indice full-text, mentre DISABLE consente di disabilitarlo. La tabella non supporta query full-text quando 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 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 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.

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

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

  • [ ,...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 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 con WITH NO POPULATION, vedere la sezione "Osservazioni" più avanti in questo argomento.

  • {ADD | DROP } STATISTICAL_SEMANTICS
    Consente di abilitare o disabilitare l'indicizzazione semantica statistica per le colonne specificate. Per ulteriori 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 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 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 ]
    Modifica l'elenco delle proprietà di ricerca associate all'indice, se presente.

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

      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 ha luogo. È 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 delle proprietà di ricerca, è necessario eseguire un popolamento sull'indice, in un momento appropriato.

      Nota importanteImportante

      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 ulteriori informazioni sulle situazioni in cui la modifica dell'elenco delle proprietà di ricerca richiede la ricompilazione, vedere le osservazioni più avanti in questo argomento.

      [!NOTA]

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

      Per individuare l'elenco di proprietà di ricerca nel database corrente

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

Osservazioni

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.

La modifica dell'elenco delle proprietà di ricerca richiede 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 nella tabella di base eseguono ricerche solo nelle righe della tabella che sono già state indicizzate dal popolamento. I dati dell'indice ripopolato includeranno metadati dalle proprietà registrate dell'elenco delle proprietà di ricerca appena aggiunto.

Scenari che comportano la ricompilazione includono:

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

  • Disattivazione dell'elenco delle proprietà di ricerca e successiva associazione dell'indice a qualsiasi elenco delle proprietà di ricerca (vedere "Scenario B" più avanti in questa sezione)

[!NOTA]

Per ulteriori 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 sul popolamento completo, vedere Popolamento degli indici full-text.

Scenario A: Passaggio diretto a un elenco delle 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: Disattivazione dell'elenco delle proprietà di ricerca e successiva associazione dell'indice a qualsiasi elenco delle 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, tramite l'istruzione seguente l'indice full-text viene nuovamente associato all'elenco delle proprietà di ricerca originale, ovvero 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 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 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

A.Impostazione del rilevamento manuale delle modifiche

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

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

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

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

[!NOTA]

Per un esempio relativo alla creazione dell'elenco di proprietà DocumentPropertyList, vedere CREATE SEARCH PROPERTY LIST (Transact-SQL).

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

C.Rimozione di un elenco delle proprietà di ricerca

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

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

D.Avvio di un popolamento completo

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

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

Vedere anche

Riferimento

sys.fulltext_indexes (Transact-SQL)

CREATE FULLTEXT INDEX (Transact-SQL)

DROP FULLTEXT INDEX (Transact-SQL)

Concetti

Ricerca full-text (SQL Server)

Popolamento degli indici full-text