Creare e gestire indici a testo completo

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

Questo articolo descrive come creare, popolare e gestire indici a testo completo nel Motore di database di SQL Server. Un indice a testo completo supporta la ricerca per parole chiave e linguistica rispetto a colonne basate su caratteri in una tabella.

Creare un catalogo di testo completo

Prima di poter creare un indice a testo completo, serve un catalogo a testo completo. Il catalogo è un contenitore virtuale per uno o più indici full-text. Per maggiori informazioni, vedi Crea e Gestisci Full-Text Cataloghi.

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 scansione). Esistono tre tipi di popolamento dell'indice full-text:

  • Popolamento completo
  • Popolamento basato sul tracciamento delle modifiche
  • Popolamento incrementale basato su un 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 di gestione dinamica Descrizione
sys.fulltext_index_catalog_usages Restituisce una riga per ogni catalogo full-text che fa riferimento a un indice full-text.
sys.fulltext_index_columns Contiene una riga per ogni colonna che fa parte di un indice full-text.
sys.fulltext_index_fragments Un indice a testo completo utilizza tabelle interne chiamate frammenti di indice a testo completo per memorizzare i dati dell'indice invertito. Puoi usare questa vista per interrogare i metadati su questi 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 Contiene una riga per indice di testo completo di un oggetto tabellare.
sys.dm_fts_index_keywords Restituisce informazioni sul contenuto di un indice full-text per la tabella specificata.
sys.dm_fts_index_keywords_by_document 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 Restituisce informazioni sulle operazioni di popolamento degli 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. Espandi Database, e quindi espandi il database che contiene 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. Questa azione apre la finestra di dialogo Proprietà dell'indice del testo completo.

  5. Nel pannello Seleziona una pagina , seleziona una delle seguenti pagine:

    Pagina Descrizione
    Generali Visualizza le proprietà di base dell'indice full-text. Queste proprietà includono diverse proprietà modificabili e molte proprietà inmodificabili come nome del database, nome della tabella e nome della colonna chiave a testo intero. Le proprietà modificabili sono le seguenti:

    Stoplist per l'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 sugli indici full-text, vedere Popolamento degli indici full-text.
    Pianificazioni Utilizzare questa pagina per creare o gestire le pianificazioni di un'attività di SQL Server Agent che avvia un popolamento incrementale delle tabelle per gli indici full-text. Per altre informazioni sugli indici full-text, vedere Popolamento degli indici full-text.

    Nota: Dopo aver chiuso la finestra di dialogo Proprietà indice full-text, ogni nuova pianificazione creata viene associata a un processo di SQL Server Agent (Avvia il popolamento incrementale della 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

Puoi usare diverse funzioni Transact-SQL, come OBJECTPROPERTYEX, per ottenere il valore di varie proprietà di indicizzazione del testo completo. 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 che contiene le informazioni sul tipo di documento della colonna. COLUMNPROPERTY
IsFulltextIndexed Specifica se una colonna è abilitata per l'indicizzazione del testo intero. 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 del testo completo in cui risiedono i dati dell'indice full-text per la tabella. OBJECTPROPERTYEX
TableFulltextChangeTrackingOn Viene verificato se una tabella ha 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 L'ID della colonna full-text della chiave univoca. 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 registrazioni in sospeso del rilevamento delle modifiche per l'elaborazione. OBJECTPROPERTYEX
TableFulltextPopulateStatus Stato del popolamento di una tabella a testo completo. OBJECTPROPERTYEX
LaTabellaHaIndiceTestoCompletoAttivo Indica se una tabella include un indice full-text attivo. OBJECTPROPERTYEX

Ottenere informazioni sulla colonna chiave a testo completo

In genere, si unisce alla tabella di base il risultato delle funzioni CONTAINSTABLE o FREETEXTTABLE che restituiscono set di righe. In questi casi, è necessario conoscere il nome della colonna chiave univoca. Puoi verificare se un dato indice unico è usato come chiave di testo intero e puoi ottenere l'identificatore della colonna di chiave di testo completo.

Determinare se un indice univoco specifico viene utilizzato come colonna chiave full-text.

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

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

Questa istruzione restituisce 1 se l'indice impone l'unicità della colonna chiave del testo completo e 0 se non lo fa.

Esempio

Il seguente esempio verifica se l'indice PK_Document_DocumentNode fa rispettare l'unicità per la colonna chiave del testo completo:

USE AdventureWorks2025;
GO

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

Questo esempio restituisce 1 se l'indice PK_Document_DocumentNode impone l'unicità per la colonna chiave del testo completo. Altrimenti, restituisce 0 o NULL. NULL significa che stai usando un nome indice non valido, il nome dell'indice non corrisponde alla tabella, la tabella non esiste, e così via.

Trovare l'identificatore della colonna chiave del testo completo

Ogni tabella abilitata al testo completo ha una colonna che impone righe uniche per la tabella (la colonna chiave unica ). La TableFulltextKeyColumn proprietà, ottenuta dalla OBJECTPROPERTYEX funzione, contiene l'ID della colonna della chiave unica.

Per ottenere questo identificatore, usa un'istruzione SELECT che chiama la OBJECTPROPERTYEX funzione. Usa la OBJECT_ID funzione per convertire il nome della tabella (table_name) nell'ID della tabella e specifica la TableFulltextKeyColumn proprietà, come segue:

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

Esempi

Il seguente esempio restituisce l'identificatore della colonna chiave full-text o NULL. NULL Implica che stai usando un nome di indice non valido, che il nome dell'indice non corrisponde alla tabella, che la tabella non esiste, o così via.

USE AdventureWorks2025;
GO

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

Il seguente esempio mostra come utilizzare l'identificatore della colonna chiave unica per ottenere il nome della colonna.

USE AdventureWorks2025;
GO

DECLARE @key_column AS 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 conteneva un nome indice non valido, il nome dell'indice non corrispondeva alla tabella, la tabella non esisteva, e così via, restituisce NULL.

Indicizzare le colonne varbinary(max) e XML

Se indicizzi a testo intero una colonna varbinary(max), varbinary o xml , puoi interrogarla usando i predicati del testo completo (CONTAINS e FREETEXT) e le funzioni (CONTAINSTABLE e FREETEXTTABLE), come qualsiasi altra colonna indicizzata a testo intero.

Indicizzare varbinary(max) o dati varbinary

In una singola colonna varbinary(max) o varbinary possono essere archiviati molti tipi di documenti. Il motore di database supporta qualsiasi tipo di documento per il quale è installato un filtro e disponibile nel sistema operativo. Il tipo di ogni documento è identificato dall'estensione file relativa. Ad esempio, per un'estensione .doc di file, la ricerca full-text utilizza il filtro che supporta i documenti 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:

EXECUTE 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) . Devi memorizzare queste informazioni in una colonna di tabella, chiamata colonna type, che associ alla colonna varbinary(max) nell'indice del testo completo. 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 maggiori informazioni sull'indicizzazione e sull'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

Nel motore di database, tutti i database creati dagli utenti sono abilitati al testo integrale di default. 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. Una tabella viene disabilitata automaticamente per l'indicizzazione full-text quando l'ultima colonna viene eliminata dall'indice full-text.

Su una tabella che ha un indice a testo intero, puoi disabilitare o riabilitare manualmente una tabella per l'indicizzazione del testo completo utilizzando SQL Server Management Studio.

  1. Espandi il gruppo di server, espandi Database, ed espandi il database contenente la tabella che si vuole abilitare per l'indicizzazione a testo completo.

  2. Espandere Tabelle e fare clic con il pulsante destro del mouse sulla tabella che si vuole disabilitare o riabilitare per l'indicizzazione a testo completo.

  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 a testo completo.

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