Creazione e gestione di indici full-textCreate and Manage Full-Text Indexes

Questo argomento descrive come creare, compilare e gestire gli indici full-text in SQL Server.This topic describes how to create, populate, and manage full-text indexes in SQL Server.

Prerequisito - Creare un catalogo full-textPrerequisite - Create a full-text catalog

Prima di poter creare un indice full-text è necessario che sia disponibile un catalogo full-text.Before you can create a full-text index, you have to have a full-text catalog. Il catalogo è un contenitore virtuale per uno o più indici full-text.The catalog is a virtual container for one or more full-text indexes. Per altre informazioni, vedere Creare e gestire cataloghi full-text.For more info, see Create and Manage Full-Text Catalogs.

Creare, modificare o eliminare un indice full-text Create, alter, or drop a full-text index

Creare un indice full-textCreate a full-text index

Modificare un indice full-textAlter a full-text index

Eliminare un indice full-textDrop a full-text index

Popolare un indice full-textPopulate a full-text index

Il processo di creazione e gestione di un indice full-text è definito popolamento (noto anche come ricerca per indicizzazione).The process of creating and maintaining a full-text index is called a population (also known as a crawl). Esistono tre tipi di popolamento dell'indice full-text:There are three types of full-text index population:

  • Popolamento completoFull population
  • Popolamento basato sul rilevamento delle modifichePopulation based on change tracking
  • Popolamento incrementale basato su timestamp.Incremental population based on a timestamp.

Per altre informazioni, vedere Popolare gli indici full-text.For more info, see Populate Full-Text Indexes.

Visualizzare le proprietà di un indice full-text View the properties of a full-text index

Visualizzare le proprietà di un indice full-text con Transact-SQLView the properties of a full-text index with Transact-SQL

Catalogo o vista a gestione dinamicaCatalog or Dynamic Management View DescriptionDescription
sys.fulltext_index_catalog_usages (Transact-SQL)sys.fulltext_index_catalog_usages (Transact-SQL) Restituisce una riga per ogni catalogo full-text in riferimento all'indice full-text.Returns a row for each full-text catalog to full-text index reference.
sys.fulltext_index_columns (Transact-SQL)sys.fulltext_index_columns (Transact-SQL) Contiene una riga per ogni colonna che fa parte di un indice full-text.Contains a row for each column that is part of a full-text index.
sys.fulltext_index_fragments (Transact-SQL)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.A fulltext index uses internal tables called full-text index fragments to store the inverted index data. Questa vista può essere utilizzata per eseguire una query sui metadati relativi a tali frammenti.This view can be used to query the metadata about these fragments. Nella vista è contenuta una riga per ogni frammento di indice full-text presente in ogni tabella contenente un indice full-text.This view contains a row for each full-text index fragment in every table that contains a full-text index.
sys.fulltext_indexes (Transact-SQL)sys.fulltext_indexes (Transact-SQL) Contiene una riga per indice full-text di un oggetto in formato di tabella.Contains a row per full-text index of a tabular object.
sys.dm_fts_index_keywords (Transact-SQL)sys.dm_fts_index_keywords (Transact-SQL) Restituisce informazioni sul contenuto di un indice full-text per la tabella specificata.Returns information about the content of a full-text index for the specified table.
sys.dm_fts_index_keywords_by_document (Transact-SQL)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.Returns information about the document-level content of a full-text index for the specified table. Una determinata parola chiave può essere inclusa in diversi documenti.A given keyword can appear in several documents.
sys.dm_fts_index_population (Transact-SQL)sys.dm_fts_index_population (Transact-SQL) Restituisce informazioni sui popolamenti di indici full-text in corso.Returns information about the full-text index populations currently in progress.

Visualizzare le proprietà di un indice full-text con Management StudioView the properties of a full-text index with Management Studio

  1. In Management Studio espandere il server in Esplora oggetti.In Management Studio, in Object Explorer, expand the server.

  2. Espandere Databasee quindi il database contenente l'indice full-text.Expand Databases, and then expand the database that contains the full-text index.

  3. Espandere Tabelle.Expand Tables.

  4. Fare clic con il pulsante destro del mouse sulla tabella in cui viene definito l'indice full-text, scegliere Indice full-texte quindi Proprietà dal menu di scelta rapida Indice full-text.Right-click the table on which the full-text index is defined, select Full-Text index, and on the Full-Text index context menu, click Properties. Verrà visualizzata la finestra di dialogo Proprietà indice full-text .This opens the Full-text index Properties dialog box.

  5. Nel riquadro Seleziona una pagina è possibile selezionare le pagine seguenti:In the Select a page pane, you can select any of the following pages:

    PaginaPage DescriptionDescription
    GeneraleGeneral Sono contenute le proprietà di base dell'indice full-text,Displays basic properties of the full-text index. incluse 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.These include several modifiable properties and a number of unchangeable properties such as database name, table name, and the name of full-text key column. Le proprietà modificabili sono le seguenti:The modifiable properties are:

    Elenco di parole non significative indice full-textFull-Text Index Stoplist

    Indicizzazione full-text abilitataFull-Text Indexing Enabled

    Rilevamento delle modificheChange Tracking

    Elenco delle proprietà di ricercaSearch Property List

    Per altre informazioni, vedere Proprietà indice full-text (pagina Generale).For more info, see Full-Text Index Properties (General Page).
    ColonneColumns Consente di visualizzare le colonne della tabella disponibili per l'indicizzazione full-text.Displays the table columns that are available for full-text indexing. La colonna o le colonne selezionate contengono indici full-text.The selected column or columns are full-text indexed. È possibile selezionare il numero desiderato di colonne disponibili da includere nell'indice full-text.You can select as many of the available columns as you want to include in the full-text index. Per altre informazioni, vedere Proprietà indice full-text (pagina Colonne).For more info, see Full-Text Index Properties (Columns Page).
    PianificazioniSchedules 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.Use this page to create or manage schedules for a SQL Server Agent job that starts an incremental table population for the full-text index populations. Per altre informazioni, vedere Popolare gli indici full-text.For more info, see Populate Full-Text Indexes.

    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).Note: After you exit the Full-Text Index Properties dialog box, any newly created schedule is associated with a SQL Server Agent job (Start Incremental Table Population on database_name.table_name).
  6. Fare clic su OK.Click OK. per salvare le modifiche e uscire dalla finestra di dialogo Proprietà indice full-text. to save any changes and exit the Full-text index Properties dialog box.

Visualizzare le proprietà di tabelle e colonne indicizzate View the properties of indexed tables and columns

Per ottenere il valore di diverse proprietà di indicizzazione full-text, è possibile utilizzare varie funzioni Transact-SQLTransact-SQL come OBJECTPROPERTYEX.Several Transact-SQLTransact-SQL functions such as OBJECTPROPERTYEX can be used to obtain the value of various full-text indexing properties. Queste informazioni sono utili per l'amministrazione e la risoluzione dei problemi relativi alla ricerca full-text.This information is useful for administering and troubleshooting full-text search.

Nella tabella seguente sono elencate le proprietà full-text relative a tabelle e colonne indicizzate e le funzioni Transact-SQLTransact-SQL correlate.The following table lists the full-text properties related to indexed tables and columns and their related Transact-SQLTransact-SQL functions.

ProprietàProperty DescrizioneDescription FunzioneFunction
FullTextTypeColumnFullTextTypeColumn TYPE COLUMN nella tabella in cui sono contenute le informazioni sui tipi di documenti della colonna.TYPE COLUMN in the table that holds the document type information of the column. COLUMNPROPERTYCOLUMNPROPERTY
IsFulltextIndexedIsFulltextIndexed Indica se una colonna è stata abilitata per l'indicizzazione full-text.Whether a column has been enabled for full-text indexing. COLUMNPROPERTYCOLUMNPROPERTY
IsFulltextKeyIsFulltextKey Indica se l'indice è la chiave full-text di una tabella.Whether the index is the full-text key for a table. INDEXPROPERTYINDEXPROPERTY
TableFulltextBackgroundUpdateIndexOnTableFulltextBackgroundUpdateIndexOn Indica se per una tabella è stata impostata l'indicizzazione full-text degli aggiornamenti in background.Whether a table has full-text background update indexing. OBJECTPROPERTYEXOBJECTPROPERTYEX
TableFulltextCatalogIdTableFulltextCatalogId ID del catalogo full-text contenente i dati dell'indice full-text per la tabella.Full-text catalog ID in which the full-text index data for the table resides. OBJECTPROPERTYEXOBJECTPROPERTYEX
TableFulltextChangeTrackingOnTableFulltextChangeTrackingOn Indica se per la tabella è abilitato il rilevamento delle modifiche full-text.Whether a table has full-text change-tracking enabled. OBJECTPROPERTYEXOBJECTPROPERTYEX
TableFulltextDocsProcessedTableFulltextDocsProcessed Numero di righe elaborate dopo l'avvio dell'indicizzazione full-text.Number of rows processed since the start of full-text indexing. OBJECTPROPERTYEXOBJECTPROPERTYEX
TableFulltextFailCountTableFulltextFailCount Numero di righe non indicizzate dalla ricerca full-text.Number of rows Full-Text Search did not index. OBJECTPROPERTYEXOBJECTPROPERTYEX
TableFulltextItemCountTableFulltextItemCount Numero di righe per cui l'indicizzazione full-text ha avuto esito positivo.Number of rows that were successfully full-text indexed. OBJECTPROPERTYEXOBJECTPROPERTYEX
TableFulltextKeyColumnTableFulltextKeyColumn ID della colonna chiave univoca full-text.The column ID of the full-text unique key column. OBJECTPROPERTYEXOBJECTPROPERTYEX
TableFullTextMergeStatusTableFullTextMergeStatus Indica se in una tabella che dispone di un indice full-text è attualmente in corso un'operazione di unione.Whether a table that has a full-text index is currently in merging. OBJECTPROPERTYEXOBJECTPROPERTYEX
TableFulltextPendingChangesTableFulltextPendingChanges Numero di voci in sospeso del rilevamento delle modifiche da elaborare.Number of pending change tracking entries to process. OBJECTPROPERTYEXOBJECTPROPERTYEX
TableFulltextPopulateStatusTableFulltextPopulateStatus Stato popolamento di una tabella full-text.Population status of a full-text table. OBJECTPROPERTYEXOBJECTPROPERTYEX
TableHasActiveFulltextIndexTableHasActiveFulltextIndex Indica se una tabella include un indice full-text attivo.Whether a table has an active full-text index. OBJECTPROPERTYEXOBJECTPROPERTYEX

Ottenere informazioni sulla colonna chiave full-text Get info about the full-text key column

In genere, il risultato della funzione con valori del set di righe CONTAINSTABLE o FREETEXTTABLE deve essere unito in join alla tabella di base.Typically, the result of CONTAINSTABLE or FREETEXTTABLE rowset-valued functions need to be joined with the base table. In questi casi, è necessario conoscere il nome della colonna chiave univoca.In such cases, you need to know the unique key column name. È possibile verificare se un determinato indice univoco viene utilizzato come chiave full-text e ottenere l'identificatore della colonna chiave full-text.You can inquire whether a given unique index is used as the full-text key, and you can obtain the identifier of the full-text key column.

Determinare se un determinato indice univoco viene usato come colonna chiave full-textDetermine whether a given unique index is used as the full-text key column

Usare un'istruzione SELECT per chiamare la funzione INDEXPROPERTY.Use a SELECT statement to call the INDEXPROPERTY function. Nella chiamata alla funzione usare 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:In the function call use the OBJECT_ID function to convert the name of the table (table_name) into the table ID, specify the name of a unique index for the table, and specify the IsFulltextKey index property, as follows:

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.This statement returns 1 if the index is used to enforce uniqueness of the full-text key column and 0 if it is not.

EsempioExample

Nell'esempio seguente viene illustrato come verificare se l'indice PK_Document_DocumentID viene utilizzato per applicare l'univocità della colonna chiave full-text:The following example inquires whether the PK_Document_DocumentID index is used to enforce the uniqueness of the full-text key column, as follows:

USE AdventureWorks  
GO  
SELECT INDEXPROPERTY ( OBJECT_ID('Production.Document'), 'PK_Document_DocumentID',  'IsFulltextKey' )  

In questo esempio viene restituito 1 se l'indice PK_Document_DocumentID viene utilizzato per applicare l'univocità della colonna chiave full-text.This example returns 1 if the PK_Document_DocumentID index is used to enforce uniqueness of the full-text key column. In caso contrario, viene restituito 0 o NULL.Otherwise, it returns 0 or 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.NULL implies you are using an invalid index name, the index name does not correspond to the table, the table does not exist, or so forth.

Trovare l'identificatore della colonna chiave full-textFind the identifier of the full-text key column

Ogni tabella full-text dispone di una colonna usata per applicare righe univoche per la tabella (colonna chiave univoca).Each full-text enabled table has a column that is used to enforce unique rows for the table (the uniquekey column). La proprietà TableFulltextKeyColumn, ottenuta dalla funzione OBJECTPROPERTYEX contiene l'ID della colonna chiave univoca.The TableFulltextKeyColumn property, obtained from the OBJECTPROPERTYEX function, contains the column ID of the unique key column.

Per ottenere questo identificatore, è possibile utilizzare un'istruzione SELECT per chiamare la funzione OBJECTPROPERTYEX.To obtain this identifier, you can use a SELECT statement to call the OBJECTPROPERTYEX function. 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:Use the OBJECT_ID function to convert the name of the table (table_name) into the table ID and specify the TableFulltextKeyColumn property, as follows:

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

EsempiExamples

Nell'esempio seguente viene restituito l'identificatore della colonna chiave full-text o NULL.The following example returns the identifier of the full-text key column or 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.NULL implies that you are using an invalid index name, the index name does not correspond to the table, the table does not exist, or so forth.

USE AdventureWorks;  
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.The following example shows how to use the identifier of the unique key column to obtain the name of the column.

USE AdventureWorks;  
GO  
DECLARE @key_column sysname  
SET @key_column = Col_Name(Object_Id('Production.Document'),  
ObjectProperty(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, DocumentID.This example returns a result set column named Unique Key Column, which displays a single row containing the name of the unique key column of the Document table, DocumentID. Si noti che 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.Note that if this query contained an invalid index name, the index name did not correspond to the table, the table did not exist, and so forth, it would return NULL.

Indicizzare colonne varbinary(max) e xmlIndex varbinary(max) and xml columns

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.If a varbinary(max), varbinary, or xml column is full-text indexed, it can be queried using the full-text predicates (CONTAINS and FREETEXT) and functions (CONTAINSTABLE and FREETEXTTABLE), like any other full-text indexed column.

Indicizzare colonne varbinary(max) o varbinaryIndex varbinary(max) or varbinary data

In una singola colonna varbinary(max) o varbinary possono essere archiviati molti tipi di documenti.A single varbinary(max) or varbinary column can store many types of documents. SQL ServerSQL Server supporta qualsiasi tipo di documento per cui viene installato un filtro e disponibile nel sistema operativo. supports any document type for which a filter is installed and available in the operative system. Il tipo di ogni documento è identificato dall'estensione file relativa.The document type of each document is identified by the file extension of the document. Per un'estensione file doc, ad esempio, la ricerca full-text utilizza il filtro che supporta i documenti di Microsoft Word.For example, for a .doc file extension, full-text search uses the filter that supports Microsoft Word documents. Per un elenco dei tipi di documento disponibili, eseguire una query sulla vista del catalogo sys.fulltext_document_types .For a list of available document types, query the sys.fulltext_document_types catalog view.

Si noti che il motore di ricerca full-text può utilizzare i filtri esistenti installati nel sistema operativo.Note that the Full-Text Engine can leverage existing filters that are installed in the operating system. 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:Before you can use operating-system filters, word breakers, and stemmers, you must load them in the server instance, as follows:

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) .To create a full-text index on a varbinary(max) column, the Full-Text Engine needs access to the file extensions of the documents in the varbinary(max) column. 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.This information must be stored in a table column, called a type column, that must be associated with the varbinary(max) column in the full-text index. 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.When indexing a document, the Full-Text Engine uses the file extension in the type column to identify which filter to use.

Indicizzare dati xmlIndex xml data

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.An xml data type column stores only XML documents and fragments, and only the XML filter is used for the documents. Una colonna del tipo non è pertanto necessaria.Therefore, a type column is unnecessary. Nelle colonne xml , l'indice full-text indicizza il contenuto degli elementi XML, ma ignora il markup XML.On xml columns, the full-text index indexes the content of the XML elements, but ignores the XML markup. Ai valori di attributo viene applicata l'indicizzazione full-text a meno che non siano valori numerici.Attribute values are full-text indexed unless they are numeric values. I tag elemento sono utilizzati come limiti del token.Element tags are used as token boundaries. Sono supportati documenti e frammenti XML o HTML ben formati e contenenti più lingue.Well-formed XML or HTML documents and fragments containing multiple languages are supported.

Per altre informazioni sull'indicizzazione e l'esecuzione di query su una colonna xml , vedere Usare la ricerca full-text con colonne XML.For more info about indexing and querying on an xml column, see Use Full-Text Search with XML Columns.

Disabilitare o riabilitare l'indicizzazione full-text per una tabella Disable or re-enable tull-text indexing for a table

Per impostazione predefinita, in SQL ServerSQL Server tutti i database creati dall'utente sono abilitati per la funzionalità full-text.In SQL ServerSQL Server, all user-created databases are full-text enabled by 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.Additionally, an individual table is automatically enabled for full-text indexing as soon as a full-text index is created on it and a column is added to the index. L'indicizzazione full-text viene disabilitata automaticamente nella tabella quando l'ultima colonna viene eliminata dall'indice full-text.A table is automatically disabled for full-text indexing when the last column is dropped from its full-text index.

In una tabella che dispone di un indice full-text è possibile disabilitare o riabilitare manualmente una tabella per indicizzazione full-text utilizzando SQL Server Management StudioSQL Server Management Studio.On a table that has a full-text index, you can manually disable or re-enable a table for full-text indexing using SQL Server Management StudioSQL 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.Expand the server group, expand Databases, and expand the database that contains the table you want to enable for full-text indexing.

  2. Espandere Tabellee fare clic con il pulsante destro del mouse sulla tabella che si vuole disabilitare o riabilitare per l'indicizzazione full-text.Expand Tables, and right-click the table that you want to disable or re-enable for full-text indexing.

  3. Scegliere Indice full-text, quindi fare clic su Disabilita indicizzazione full-text o Abilita indicizzazione full-text.Select Full-Text index, and then click Disable Full-Text index or Enable Full-Text index.

Rimuovere un indice full-text da una tabella Remove a full-text index from a table

  1. In Esplora oggetti fare clic con il pulsante destro del mouse sulla tabella contenente l'indice full-text che si desidera eliminare.In Object Explorer, right-click the table that has the full-text index that you want to delete.

  2. Selezionare Elimina indice full-text.Select Delete Full-Text index.

  3. Quando richiesto, fare clic su OK per confermare l'eliminazione dell'indice full-text.When prompted, click OK to confirm that you want to delete the full-text index.