Creare e gestire indici full-text

Si applica a:SQL ServerDatabase SQL di AzureIstanza gestita di SQL di Azure

Questo argomento descrive come creare, compilare e gestire gli indici full-text in SQL Server.

Creazione di un catalogo full-text

Prima di poter creare un indice full-text è necessario che sia disponibile un catalogo full-text. Il catalogo è un contenitore virtuale per uno o più indici full-text. Per altre informazioni, vedere Creare e gestire cataloghi full-text.

Creare, modificare o eliminare un indice full-text

Popolare un indice full-text

Il processo di creazione e gestione di un indice full-text è definito popolamento (noto anche come ricerca per indicizzazione). Esistono tre tipi di popolamento dell'indice full-text:

  • Popolamento completo
  • Popolamento basato sul rilevamento delle modifiche
  • Popolamento incrementale basato su timestamp.

Per altre informazioni sugli indici full-text, vedere Popolamento degli indici full-text.

Visualizzare le proprietà di un indice full-text

Visualizzare le proprietà di un indice full-text con Transact-SQL

Catalogo o vista a gestione dinamica Descrizione
sys.fulltext_index_catalog_usages (Transact-SQL) Restituisce una riga per ogni catalogo full-text in riferimento all'indice full-text.
sys.fulltext_index_columns (Transact-SQL) Contiene una riga per ogni colonna che fa parte di un indice full-text.
sys.fulltext_index_fragments (Transact-SQL) Un indice full-text utilizza tabelle interne denominate frammenti di indice full-text per archiviare i dati dell'indice invertito. Questa vista può essere utilizzata per eseguire una query sui metadati relativi a tali frammenti. Nella vista è contenuta una riga per ogni frammento di indice full-text presente in ogni tabella contenente un indice full-text.
sys.fulltext_indexes (Transact-SQL) Contiene una riga per indice full-text di un oggetto in formato di tabella.
sys.dm_fts_index_keywords (Transact-SQL) Restituisce informazioni sul contenuto di un indice full-text per la tabella specificata.
sys.dm_fts_index_keywords_by_document (Transact-SQL) Restituisce informazioni sul contenuto a livello di documento di un indice full-text per la tabella specificata. Una determinata parola chiave può essere inclusa in diversi documenti.
sys.dm_fts_index_population (Transact-SQL) Restituisce informazioni sui popolamenti di indici full-text in corso.

Visualizzare le proprietà di un indice full-text con SQL Server Management Studio

Nota

Per visualizzare le proprietà degli indici full-text per i database SQL di Azure, usa Transact-SQL.

  1. In SQL Server Management Studio, in Esplora oggetti, espandi il server.

  2. Espandere Databasee quindi il database contenente l'indice full-text.

  3. Espandere Tabelle.

  4. Fai clic con il pulsante destro del mouse sulla tabella in cui viene definito l'indice full-text, scegli Indice full-text e quindi Proprietà dal menu di scelta rapida Indice full-text. Verrà visualizzata la finestra di dialogo Proprietà indice full-text .

  5. Nel riquadro Seleziona una pagina è possibile selezionare le pagine seguenti:

    Pagina Descrizione
    Generali Sono contenute le proprietà di base dell'indice full-text, Include diverse proprietà modificabili e alcune proprietà non modificabili quali il nome del database, il nome della tabella e il nome della colonna chiave full-text. Le proprietà modificabili sono le seguenti:

    Elenco di parole non significative indice full-text

    Indicizzazione full-text abilitata

    Registrazione modifiche

    Elenco delle proprietà di ricerca
    Colonne Consente di visualizzare le colonne della tabella disponibili per l'indicizzazione full-text. La colonna o le colonne selezionate contengono indici full-text. È possibile selezionare il numero desiderato di colonne disponibili da includere nell'indice full-text. Per altre informazioni, vedere Popolare gli indici full-text.
    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 per i popolamenti dell'indice full-text. Per altre informazioni, vedere Popolare gli indici full-text.

    Nota: dopo avere chiuso la finestra di dialogo Proprietà indice full-text , eventuali nuove pianificazioni vengono associate a un processo di SQL Server Agent (avviare Popolamento incrementale tabella in database_name.table_name).
  6. Seleziona OK per salvare le modifiche e uscire dalla finestra di dialogo Proprietà indice full-text.

Visualizzare le proprietà di tabelle e colonne indicizzate

Per ottenere il valore di diverse proprietà di indicizzazione full-text, è possibile utilizzare varie funzioni Transact-SQL come OBJECTPROPERTYEX. Queste informazioni sono utili per l'amministrazione e la risoluzione dei problemi relativi alla ricerca full-text.

Nella tabella seguente sono elencate le proprietà full-text relative a tabelle e colonne indicizzate e le funzioni Transact-SQL correlate.

Proprietà Descrizione Funzione
FullTextTypeColumn TYPE COLUMN nella tabella in cui sono contenute le informazioni sui tipi di documenti della colonna. COLUMNPROPERTY
IsFulltextIndexed Indica se una colonna è stata abilitata per l'indicizzazione full-text. COLUMNPROPERTY
IsFulltextKey Indica se l'indice è la chiave full-text di una tabella. INDEXPROPERTY
TableFulltextBackgroundUpdateIndexOn Indica se per una tabella è stata impostata l'indicizzazione full-text degli aggiornamenti in background. OBJECTPROPERTYEX
TableFulltextCatalogId ID del catalogo full-text contenente i dati dell'indice full-text per la tabella. OBJECTPROPERTYEX
TableFulltextChangeTrackingOn Indica se per la tabella è abilitato il rilevamento delle modifiche full-text. OBJECTPROPERTYEX
TableFulltextDocsProcessed Numero di righe elaborate dopo l'avvio dell'indicizzazione full-text. OBJECTPROPERTYEX
TableFulltextFailCount Numero di righe non indicizzate dalla ricerca full-text. OBJECTPROPERTYEX
TableFulltextItemCount Numero di righe per cui l'indicizzazione full-text ha avuto esito positivo. OBJECTPROPERTYEX
TableFulltextKeyColumn ID della colonna chiave univoca full-text. OBJECTPROPERTYEX
TableFullTextMergeStatus Indica se in una tabella che dispone di un indice full-text è attualmente in corso un'operazione di unione. OBJECTPROPERTYEX
TableFulltextPendingChanges Numero di voci in sospeso del rilevamento delle modifiche da elaborare. OBJECTPROPERTYEX
TableFulltextPopulateStatus Stato popolamento di una tabella full-text. OBJECTPROPERTYEX
TableHasActiveFulltextIndex Indica se una tabella include un indice full-text attivo. OBJECTPROPERTYEX

Ottenere informazioni sulla colonna chiave full-text

In genere, il risultato della funzione con valori del set di righe CONTAINSTABLE o FREETEXTTABLE deve essere unito in join alla tabella di base. In questi casi, è necessario conoscere il nome della colonna chiave univoca. È possibile verificare se un determinato indice univoco viene utilizzato come chiave full-text e ottenere l'identificatore della colonna chiave full-text.

Determinare se un determinato indice univoco viene usato come colonna chiave full-text

Usare un'istruzione SELECT per chiamare la funzione INDEXPROPERTY. Nella chiamata alla funzione, usa la funzione OBJECT_ID per convertire il nome della tabella (table_name) nell'ID tabella, specificare il nome di un indice univoco per la tabella, quindi specificare la proprietà di indice IsFulltextKey come illustrato di seguito:

SELECT INDEXPROPERTY(OBJECT_ID('table_name'), 'index_name',  'IsFulltextKey');

L'istruzione restituisce 1 se l'indice viene utilizzato per applicare l'unicità della colonna chiave full-text e 0 in caso contrario.

Esempio

Nell'esempio seguente viene illustrato come verificare se l'indice PK_Document_DocumentNode viene utilizzato per applicare l'univocità della colonna chiave full-text:

USE AdventureWorks2022;
GO
SELECT INDEXPROPERTY(OBJECT_ID('Production.Document'), 'PK_Document_DocumentNode',  'IsFulltextKey');

In questo esempio viene restituito 1 se l'indice PK_Document_DocumentNode viene utilizzato per applicare l'univocità della colonna chiave full-text. In caso contrario, viene restituito 0 o NULL. NULL indica che è in uso un nome di indice non valido, il nome dell'indice non corrisponde alla tabella, la tabella non esiste e così via.

Trovare l'identificatore della colonna chiave full-text

Ogni tabella abilitata per la funzionalità full-text include una colonna che viene usata per applicare righe univoche per la tabella (la colonna chiave univoca). La proprietà TableFulltextKeyColumn, ottenuta dalla funzione OBJECTPROPERTYEX contiene l'ID della colonna chiave univoca.

Per ottenere questo identificatore, è possibile utilizzare un'istruzione SELECT per chiamare la funzione OBJECTPROPERTYEX. Usare la funzione OBJECT_ID per convertire il nome della tabella (table_name) nell'ID tabella e specificare la proprietà TableFulltextKeyColumn come illustrato di seguito:

SELECT OBJECTPROPERTYEX(OBJECT_ID('table_name'), 'TableFulltextKeyColumn' ) AS 'Column Identifier';

Esempi

Nell'esempio seguente viene restituito l'identificatore della colonna chiave full-text o NULL. NULL indica che è in uso un nome di indice non valido, il nome dell'indice non corrisponde alla tabella, la tabella non esiste e così via.

USE AdventureWorks2022;
GO
SELECT OBJECTPROPERTYEX(OBJECT_ID('Production.Document'), 'TableFulltextKeyColumn');
GO

Nell'esempio seguente viene illustrato come utilizzare l'identificatore della colonna chiave univoca per ottenere il nome della colonna.

USE AdventureWorks2022;
GO

DECLARE @key_column SYSNAME

SET @key_column = COL_NAME(OBJECT_ID('Production.Document'),
   OBJECTPROPERTYEX(OBJECT_ID('Production.Document'), 'TableFulltextKeyColumn'));

SELECT @key_column AS 'Unique Key Column';
GO

Nell'esempio viene restituita una colonna del set di risultati denominata Unique Key Columnin cui viene visualizzata una sola riga contenente il nome della colonna chiave univoca della tabella Document, DocumentNode. Se questa query contenesse un nome di indice non valido, il nome di indice non corrispondesse alla tabella, la tabella non esistesse e così via, il risultato restituito sarebbe NULL.

Indicizzare le colonne varbinary(max) e XML

Se una colonna varbinary(max), varbinaryo xml viene sottoposta a indicizzazione full-text, le query su questa colonna possono essere eseguite usando predicati (CONTAINS e FREETEXT) e funzioni (CONTAINSTABLE e FREETEXTTABLE) full-text, proprio come su ogni altra colonna con indicizzazione full-text.

Indicizzare colonne varbinary(max) o varbinary

In una singola colonna varbinary(max) o varbinary possono essere archiviati molti tipi di documenti. SQL Server supporta qualsiasi tipo di documento per cui è installato un filtro disponibile nel sistema operativo. Il tipo di ogni documento è identificato dall'estensione file relativa. Per un'estensione file doc, ad esempio, la ricerca full-text utilizza il filtro che supporta i documenti di Microsoft Word. Per un elenco dei tipi di documento disponibili, eseguire una query sulla vista del catalogo sys.fulltext_document_types .

Il motore di ricerca full-text può utilizzare i filtri esistenti installati nel sistema operativo. Prima di poter utilizzare i filtri, i word breaker e gli stemmer del sistema operativo, è necessario caricarli nell'istanza del server, come illustrato di seguito:

EXEC sp_fulltext_service @action = 'load_os_resources', @value = 1;

Per creare un indice full-text in una colonna varbinary(max) , il motore di ricerca full-text deve accedere alle estensioni file dei documenti nella colonna varbinary(max) . Queste informazioni devono essere archiviate in una colonna di tabella, denominata colonna del tipo, che deve essere associata alla colonna varbinary(max) nell'indice full-text. Quando si esegue l'indicizzazione di un documento, il motore di ricerca full-text utilizza l'estensione del file nella colonna del tipo per identificare il filtro da utilizzare.

Indicizzare i dati xml

In una colonna del tipo di dati xml vengono archiviati esclusivamente documenti e frammenti XML e per i documenti viene usato solo il filtro XML. Una colonna del tipo non è pertanto necessaria. Nelle colonne xml , l'indice full-text indicizza il contenuto degli elementi XML, ma ignora 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 sull'indicizzazione e l'esecuzione di query su una colonna xml , vedere Usare la ricerca full-text con colonne XML.

Disabilitare o riabilitare l'indicizzazione full-text per una tabella

In SQL Server, per impostazione predefinita, tutti i database creati dall'utente sono abilitati per la funzionalità full-text. Una tabella viene inoltre abilitata automaticamente per l'indicizzazione full-text dopo la creazione di un indice full-text nella tabella e l'aggiunta di una colonna all'indice. L'indicizzazione full-text viene disabilitata automaticamente nella tabella quando l'ultima colonna viene eliminata dall'indice full-text.

In una tabella che dispone di un indice full-text, puoi disabilitare o riabilitare manualmente una tabella per l’indicizzazione full-text usando SQL Server Management Studio.

  1. Espandere il gruppo di server, espandere Database, quindi il database contenente la tabella che si vuole abilitare per l'indicizzazione full-text.

  2. Espandere Tabellee fare clic con il pulsante destro del mouse sulla tabella che si vuole disabilitare o riabilitare per l'indicizzazione full-text.

  3. Seleziona Indice full-text, quindi fai clic su Disabilita indicizzazione full-text o Abilita indicizzazione full-text.

Rimuovere un indice full-text da una tabella

  1. In Esplora oggetti fare clic con il pulsante destro del mouse sulla tabella contenente l'indice full-text che si desidera eliminare.

  2. Selezionare Elimina indice full-text.

  3. Quando richiesto, seleziona OK per confermare l'eliminazione dell'indice full-text.

Passaggi successivi