Popolamento degli indici full-text
La creazione e la gestione di un indice full-text comporta il popolamento dell'indice mediante un processo denominato popolamento, anche noto con il termine ricerca per indicizzazione.
Contenuto dell'argomento
Tipi di popolamento
Esempi di popolamento di indici full-text
Creazione o modifica di una pianificazione per un popolamento incrementale
Risoluzione di errori in un popolamento full-text (ricerca per indicizzazione)
Tipi di popolamento
SQL Server supporta i tipi seguenti di popolamento: popolamento completo, popolamento automatico o manuale basato sul rilevamento delle modifiche e popolamento incrementale basato su timestamp.
Popolamento completo
Durante un popolamento completo, vengono compilate voci di indice per tutte le righe di una tabella o di una vista indicizzata. Durante un popolamento completo di un indice full-text, vengono compilate voci di indice per tutte le righe di una tabella di base o di una vista indicizzata.
Per impostazione predefinita, in SQL Server un nuovo indice full-text viene popolato completamente non appena viene creato. Un popolamento completo può tuttavia richiedere una quantità significativa di risorse. Pertanto, quando si crea un indice full-text durante periodi di intensa attività, è spesso consigliabile rimandare il popolamento completo a un periodo di attività meno intensa, in particolare se la tabella di base di un indice full-text è di grandi dimensioni. Tuttavia, il catalogo full-text a cui appartiene l'indice non può essere utilizzato finché non vengono popolati tutti i relativi indici full-text. Per creare un indice full-text senza popolarlo immediatamente, specificare la clausola CHANGE_TRACKING OFF, NO POPULATION nell'istruzione CREATE FULLTEXT INDEX. Se viene specificato CHANGE_TRACKING MANUAL, il motore di ricerca full-text utilizza l'istruzione. In SQL Server il nuovo indice full-text non viene popolato fino a quando non si esegue un'istruzione ALTER FULLTEXT INDEX utilizzando la clausola START FULL POPULATION o START INCREMENTAL POPULATION. Per ulteriori informazioni, vedere gli esempi A. Creazione di un indice full-text senza eseguire un popolamento completo" e "B. Esecuzione di un popolamento completo nella tabella", più avanti in questo argomento.
[TORNA ALL'INIZIO]TORNA ALL'INIZIO
Popolamento basato sul rilevamento delle modifiche
Facoltativamente, è possibile utilizzare il rilevamento delle modifiche per gestire un indice full-text dopo il popolamento completo iniziale. Al rilevamento delle modifiche è associato un overhead perché in SQL Server è presente una tabella nella quale vengono rilevate le modifiche apportate alla tabella di base dopo l'ultimo popolamento. Quando si utilizza il rilevamento delle modifiche, in SQL Server viene mantenuto un record delle righe della tabella di base o della vista indicizzata modificate tramite aggiornamenti, eliminazioni o inserimenti. Le modifiche apportate ai dati tramite WRITETEXT e UPDATETEXT non vengono riflesse nell'indice full-text, pertanto non vengono registrate dalla funzione di rilevamento delle modifiche.
[!NOTA]
Per le tabelle che contengono una colonna timestamp, è possibile utilizzare i popolamenti incrementali.
Quando il rilevamento delle modifiche viene abilitato durante la creazione dell'indice, in SQL Server il nuovo indice full-text viene popolato in modo completo immediatamente dopo essere stato creato. Le modifiche vengono quindi rilevate e propagate all'indice full-text. Il rilevamento delle modifiche può essere di due tipi, ovvero automatico (opzione CHANGE_TRACKING AUTO) e manuale (opzione CHANGE_TRACKING MANUAL). Il rilevamento delle modifiche automatico è il comportamento predefinito.
La modalità di popolamento dell'indice full-text dipende dal tipo di rilevamento delle modifiche:
Popolamento automatico
Per impostazione predefinita o se si specifica CHANGE_TRACKING AUTO, il motore di ricerca full-text utilizza il popolamento automatico per l'indice full-text. Al termine del popolamento completo iniziale, le modifiche vengono rilevate man mano che i dati vengono modificati nella tabella di base e le modifiche rilevate vengono propagate automaticamente. L'indice full-text viene aggiornato in background, pertanto le modifiche propagate potrebbero non venire riflesse immediatamente nell'indice.
Per configurare il rilevamento delle modifiche con il popolamento automatico
CREATE FULLTEXT INDEX … WITH CHANGE_TRACKING AUTO
ALTER FULLTEXT INDEX … SET CHANGE_TRACKING AUTO
Per ulteriori informazioni, vedere l'esempio "E. Modifica di un indice full-text per l'utilizzo del rilevamento delle modifiche automatico", più avanti in questo argomento.
Popolamento manuale
Se si specifica CHANGE_TRACKING MANUAL, il motore di ricerca full-text utilizza il popolamento manuale per l'indice full-text. Al termine del popolamento completo iniziale, le modifiche vengono rilevate man mano che i dati vengono modificati nella tabella di base. Non vengono tuttavia propagate nell'indice full-text finché non viene eseguita un'istruzione ALTER FULLTEXT INDEX … START UPDATE POPULATION. Per chiamare questa istruzione Transact-SQL periodicamente, è possibile utilizzare SQL Server Agent.
Per avviare il rilevamento delle modifiche con il popolamento manuale
CREATE FULLTEXT INDEX … WITH CHANGE_TRACKING MANUAL
ALTER FULLTEXT INDEX … SET CHANGE_TRACKING MANUAL
Per ulteriori informazioni, vedere gli esempi "C. Creazione di un indice full-text con il rilevamento delle modifiche manuale" e "D. Esecuzione di un popolamento manuale" di seguito in questo argomento.
Per disattivare il rilevamento delle modifiche
CREATE FULLTEXT INDEX … WITH CHANGE_TRACKING OFF
ALTER FULLTEXT INDEX … SET CHANGE_TRACKING OFF
[TORNA ALL'INIZIO]TORNA ALL'INIZIO
Popolamento incrementale basato su timestamp
Un popolamento incrementale è un meccanismo alternativo per il popolamento manuale di un indice full-text. È possibile eseguire un popolamento incrementale per un indice full-text per il quale CHANGE_TRACKING è impostato su MANUAL o OFF. Se il primo popolamento di un indice full-text è incrementale, vengono indicizzate tutte le righe e il risultato è equivalente a un popolamento completo.
Per eseguire il popolamento incrementale, è necessario che la tabella indicizzata contenga una colonna del tipo di dati timestamp. Se non è disponibile una colonna timestamp, il popolamento incrementale non può essere eseguito. Se viene richiesto un popolamento incrementale per una tabella senza una colonna timestamp, verrà eseguito un popolamento completo. Se alcuni metadati che interessano l'indice full-text della tabella sono stati modificati dopo l'ultimo popolamento, le richieste di popolamento vengono implementate come popolamenti completi. Sono incluse le modifiche ai metadati causate dall'alterazione di qualsiasi definizione di colonna, indice o indice full-text.
In SQL Server viene utilizzata la colonna timestamp per identificare le righe che sono state modificate dopo l'ultimo popolamento. Il popolamento incrementale aggiorna l'indice full-text per le righe aggiunte, eliminate o modificate dopo l'ultimo popolamento o durante la sua esecuzione. Se in una tabella vengono eseguiti molti inserimenti, l'utilizzo del popolamento incrementale può rivelarsi più efficiente dell'utilizzo del popolamento manuale.
Al termine di un popolamento, il motore di ricerca full-text registra un nuovo valore timestamp, che corrisponde al valore timestamp maggiore rilevato da SQL Gatherer. Questo valore verrà utilizzato all'avvio del successivo popolamento incrementale.
Per eseguire un popolamento incrementale, eseguire un'istruzione ALTER FULLTEXT INDEX utilizzando la clausola START INCREMENTAL POPULATION.
[TORNA ALL'INIZIO]TORNA ALL'INIZIO
Esempi di popolamento di indici full-text
[!NOTA]
Negli esempi inclusi in questa sezione viene utilizzata la tabella Production.Document o HumanResources.JobCandidate del database di esempio AdventureWorks.
A.Creazione di un indice full-text senza eseguire un popolamento completo
Nell'esempio seguente viene creato un indice full-text nella tabella Production.Document del database di esempio AdventureWorks. In questo esempio viene utilizzato WITH CHANGE_TRACKING OFF, NO POPULATION per rimandare il popolamento completo iniziale.
CREATE UNIQUE INDEX ui_ukDoc ON Production.Document(DocumentID);
CREATE FULLTEXT CATALOG AW_Production_FTCat;
CREATE FULLTEXT INDEX ON Production.Document
(
Document --Full-text index column name
TYPE COLUMN FileExtension --Name of column that contains file type information
Language 1033 --1033 is LCID for the English language
)
KEY INDEX ui_ukDoc
ON AW_Production_FTCat
WITH CHANGE_TRACKING OFF, NO POPULATION;
GO
B.Esecuzione di un popolamento completo nella tabella
Nell'esempio seguente viene eseguito un popolamento completo nella tabella Production.Document del database di esempio AdventureWorks.
ALTER FULLTEXT INDEX ON Production.Document
START FULL POPULATION;
C.Creazione di un indice full-text con il rilevamento delle modifiche manuale
Nell'esempio seguente viene creato un indice full-text che utilizzerà il rilevamento delle modifiche con popolamento manuale nella tabella HumanResources.JobCandidate del database di esempio AdventureWorks.
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 CHANGE_TRACKING=MANUAL;
GO
D.Esecuzione di un popolamento manuale
Nell'esempio seguente viene eseguito un popolamento manuale nell'indice full-text con rilevamento delle modifiche della tabella HumanResources.JobCandidate del database di esempio AdventureWorks.
USE AdventureWorks;
GO
ALTER FULLTEXT INDEX ON HumanResources.JobCandidate START UPDATE POPULATION;
GO
E.Modifica di un indice full-text per l'utilizzo del rilevamento delle modifiche automatico
Nell'esempio seguente viene creato un indice full-text della tabella HumanResources.JobCandidate del database di esempio AdventureWorks per l'utilizzo del rilevamento delle modifiche con il popolamento automatico.
USE AdventureWorks;
GO
ALTER FULLTEXT INDEX ON HumanResources.JobCandidate SET CHANGE_TRACKING AUTO;
GO
[TORNA ALL'INIZIO]TORNA ALL'INIZIO
Creazione o modifica di una pianificazione per un popolamento incrementale
Per creare o modificare una pianificazione per popolamento incrementale in Management Studio
In Esplora oggetti espandere il server.
Espandere Database, quindi espandere il database che contiene l'indice full-text.
Espandere Tabelle.
Fare clic con il pulsante destro del mouse sulla tabella per la quale si desidera creare un indice full-text, selezionare Indice full-text e quindi scegliere Proprietà dal menu di scelta rapida Indice full-text. Verrà visualizzata la finestra di dialogo Proprietà indice full-text.
Nel riquadro Selezione pagina selezionare Pianificazioni.
Utilizzare questa pagina per creare o gestire le pianificazioni per un processo di SQL Server Agent che consente di avviare un popolamento incrementale della tabella di base o della vista indicizzata dell'indice full-text.
Importante Se la tabella di base o la vista indicizzata non contiene una colonna del tipo di dati timestamp, viene eseguito un popolamento completo.
Sono disponibili le opzioni seguenti:
Per creare una nuova pianificazione, fare clic su Nuovo.
Viene aperta la finestra di dialogo Nuova pianificazione tabella indicizzazione full-text, in cui è possibile creare una pianificazione. Per salvare la pianificazione, fare clic su OK
Importante Dopo avere chiuso la finestra di dialogo Full-Text Index Properties, un processo di SQL Server Agent (Avvio del popolamento incrementale della tabella in database_name.table_name) viene associato a una nuova pianificazione. Se vengono create più pianificazioni per l'indice full-text, tutte utilizzano lo stesso processo.
Per modificare una pianificazione, selezionarla e fare clic su Modifica.
Verrà visualizzata la finestra di dialogo Nuova pianificazione tabella indicizzazione full-text, in cui è possibile modificare la pianificazione.
[!NOTA]
Per informazioni sulla modifica di un processo, vedere Modificare un processo.
Per rimuovere una pianificazione, selezionarla e fare clic su Elimina.
Fare clic su OK.
[TORNA ALL'INIZIO]TORNA ALL'INIZIO
Risoluzione di errori in un popolamento full-text (ricerca per indicizzazione)
Quando si verifica un errore durante una ricerca per indicizzazione, la funzionalità di registrazione corrispondente per la ricerca full-text crea e gestisce un log di tipo ricerca per indicizzazione in formato testo normale. Ogni log di tipo ricerca per indicizzazione corrisponde a un catalogo full-text specifico. Per impostazione predefinita, i log di tipo ricerca per indicizzazione per un'istanza specifica, in questo caso la prima, si trovano nella cartella %Programmi%\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\LOG. Il file del log di tipo ricerca per indicizzazione segue lo schema di denominazione seguente:
SQLFT<DatabaseID><FullTextCatalogID>.LOG[<n>]
<DatabaseID>
ID di un database. <dbid> è un numero a cinque cifre con zeri iniziali.<FullTextCatalogID>
ID del catalogo full-text. <catid> è un numero a cinque cifre con zeri iniziali.<n>
È un numero intero che indica l'esistenza di uno o più log di tipo ricerca per indicizzazione per lo stesso catalogo full-text.
Ad esempio, SQLFT0000500008.2 è il file del log di tipo ricerca per indicizzazione per un database con ID database = 5 e ID catalogo full-text = 8. Il 2 alla fine del nome file indica che sono disponibili due file del log di tipo ricerca per indicizzazione per questa coppia di database/catalogo.
[TORNA ALL'INIZIO]TORNA ALL'INIZIO
Vedere anche
Riferimento
sys.dm_fts_index_population (Transact-SQL)
CREATE FULLTEXT INDEX (Transact-SQL)
ALTER FULLTEXT INDEX (Transact-SQL)