Introduzione alla ricerca full-textGet Started with Full-Text Search

La funzionalità full-text è abilitata per impostazione predefinita nei database di SQL Server.SQL Server databases are full-text enabled by default. Prima di poter eseguire query full-text, è necessario creare un catalogo full-text completo e un indice full-text nelle tabelle o nelle viste indicizzate in cui si vuole eseguire la ricerca.Before you can run full-text queries, however, you must create a full text catalog and create a full-text index on the tables or indexed views you want to search.

Configurare la ricerca full-text in due passaggiSet up full-text search in two steps

Per configurare la ricerca full-text sono richiesti due passaggi di base:There are two basic steps to set up full-text search:

  1. Creazione di un catalogo full-text.Create a full-text catalog.
  2. Creare un indice full-text nelle tabelle o nelle viste indicizzate in cui eseguire la ricerca.Create a full-text index on tables or indexed view you want to search.

Ogni indice full-text deve appartenere a un catalogo full-text.Each full-text index must belong to a full-text catalog. È possibile creare un catalogo di testo separato per ogni indice full-text oppure associare più indici full-text a un determinato catalogo.You can create a separate text catalog for each full-text index, or you can associate multiple full-text indexes with a given catalog. Un catalogo full-text è un oggetto virtuale e non appartiene ad alcun filegroup.A full-text catalog is a virtual object and does not belong to any filegroup. Il catalogo full-text è un concetto logico che fa riferimento a un gruppo di indici full-text.The catalog is a logical concept that refers to a group of full-text indexes.

Nota

Questa procedura presuppone che siano stati installati i componenti facoltativi della ricerca full-text durante l'installazione di SQL Server.These steps assume that you installed the optional Full-Text Search components when you installed SQL Server. In caso contrario, è necessario eseguire di nuovo il programma di installazione di SQL Server per aggiungerli.If not, you have to run SQL Server Setup again to add them.

Configurare la ricerca full-text con una procedura guidataSet up full-text search with a wizard

Per configurare la ricerca full-text con una procedura guidata, vedere Usare l'Indicizzazione guidata full-text.To set up full-text search by using a wizard, see Use the Full-Text Indexing Wizard.

Configurare la ricerca full-text con Transact-SQLSet up full-text search with Transact-SQL

L'esempio in due parti seguente consiste nella creazione di un catalogo full-text denominato AdvWksDocFTCat nel database di esempio AdventureWorks e quindi nella creazione di un indice full-text nella tabella Document nel database di esempio.The following two-part example creates a full-text catalog named AdvWksDocFTCat on the AdventureWorks sample database and then creates a full-text index on the Document table in the sample database. Questa istruzione crea il catalogo full-text nella directory predefinita specificata durante l'installazione di SQL Server.This statement creates the full-text catalog in the default directory specified during SQL Server setup. La cartella denominata AdvWksDocFTCat si trova nella directory predefinita.The folder named AdvWksDocFTCat is in the default directory.

  1. Per creare un catalogo full-text denominato AdvWksDocFTCat, nell'esempio viene usata un'istruzione CREATE FULLTEXT CATALOG :To create a full-text catalog named AdvWksDocFTCat, the example uses a CREATE FULLTEXT CATALOG statement:

    USE AdventureWorks;  
    GO  
    CREATE FULLTEXT CATALOG AdvWksDocFTCat;  
    

    Per altre informazioni, vedere Creare e gestire cataloghi full-text.For more info, see Create and Manage Full-Text Catalogs.

  2. Prima di creare un indice full-text nella tabella Document, assicurarsi che la tabella disponga di un indice univoco a singola colonna che non ammette valori Null.Before you can create a full-text index on the Document table, ensure that the table has a unique, single-column, non-nullable index. L'istruzione CREATE INDEX seguente consente di creare un indice univoco, ui_ukDoc, nella colonna DocumentID della tabella Document:The following CREATE INDEX statement creates a unique index, ui_ukDoc, on the DocumentID column of the Document table:

    CREATE UNIQUE INDEX ui_ukDoc ON Production.Document(DocumentID);  
    
  3. Quando si dispone di una chiave univoca, è possibile creare un indice full-text nella tabella Document usando l'istruzione CREATE FULLTEXT INDEX seguente.After you have a unique key, you can create a full-text index on the Document table by using the following CREATE FULLTEXT INDEX statement.

    CREATE FULLTEXT INDEX ON Production.Document  
    (  
        Document                         --Full-text index column name   
            TYPE COLUMN FileExtension    --Name of column that contains file type information  
            Language 2057                 --2057 is the LCID for British English  
    )  
    KEY INDEX ui_ukDoc ON AdvWksDocFTCat --Unique index  
    WITH CHANGE_TRACKING AUTO            --Population type;  
    GO  
    

    L'elemento TYPE COLUMN definito in questo esempio specifica la colonna del tipo nella tabella che contiene il tipo di documento in ciascuna riga della colonna 'Document' (che è di tipo binario).The TYPE COLUMN defined in this example specifies the type column in the table that contains the type of the document in each row of the column 'Document' (which is of binary type). Nella colonna del tipo è archiviata l'estensione di file fornita dall'utente, ovvero "doc", "xls" e così via, del documento in una determinata riga.The type column stores the user-supplied file extension - ".doc", ".xls", and so forth - of the document in a given row. Il motore di ricerca full-text utilizza l'estensione file in una determinata riga per richiamare il filtro corretto da utilizzare per l'analisi dei dati di quella riga.The Full-Text Engine uses the file extension in a given row to invoke the correct filter to use for parsing the data in that row. Al termine dell'analisi dei dati binari della riga eseguita tramite il filtro, il word breaker specificato analizzerà il contenuto.After the filter has parsed the binary data of the row, the specified word breaker parses the content. In questo esempio viene usato il word breaker per l'Inglese britannico. Per altre informazioni, vedere Configurazione e gestione di filtri per la ricerca.(In this example, the word breaker for British English is used.) For more information, see Configure and Manage Filters for Search.

    Per altre informazioni, vedere Creare e gestire indici full-text.For more info, see Create and Manage Full-Text Indexes.

Scegliere le opzioni per un indice full-text Choose options for a full-text index

Scegliere una linguaChoose a language

Per informazioni sulla scelta della lingua delle colonne, vedere Scegliere una lingua durante la creazione di un indice full-text.For information about choosing the column language, see Choose a Language When Creating a Full-Text Index.

Scegliere un filegroupChoose a filegroup

Il processo di compilazione di un indice full-text richiede l'esecuzione di molte operazioni di I/O.The process of building a full-text index is fairly I/O intensive. In sintesi, consiste nella lettura di dati da SQL ServerSQL Server e quindi nella propagazione dei dati filtrati all'indice full-text.In summary, it consists of reading data from SQL ServerSQL Server, and then propagating the filtered data to the full-text index. La procedura consigliata consiste nell'individuare l'indice full-text nel filegroup del database ideale per ottimizzare le prestazioni di I/O oppure gli indici full-text in un filegroup diverso in un altro volume.As a best practice, locate a full-text index in the database filegroup that is best for maximizing I/O performance or locate the full-text indexes in a different filegroup on another volume.

Scegliere un catalogo full-textChoose a full-text catalog

È consigliabile associare nello stesso catalogo full-text le tabelle con caratteristiche di aggiornamento equivalenti, ad esempio un numero ridotto o elevato di modifiche oppure modifiche frequenti apportate a una determinata ora del giorno.We recommend associating tables with the same update characteristics (such as small number of changes versus large number of changes, or tables that change frequently during a particular time of day) together under the same full-text catalog. Pianificando il popolamento del catalogo full-text, gli indici full-text mantengono la sincronizzazione con le tabelle senza influire negativamente sull'utilizzo delle risorse del server di database durante i periodi di elevata attività del database.By setting up full-text catalog population schedules, full-text indexes stay synchronous with the tables without adversely affecting the resource usage of the database server during periods of high database activity.

Tenere presenti le linee guida seguenti:Consider the following guidelines:

  • Se viene indicizzata una tabella che include milioni di righe, assegnarla al relativo catalogo full-text.If you are indexing a table with millions of rows, assign the table to its own full-text catalog.

  • Considerare la quantità di modifiche apportate alle tabelle durante l'indicizzazione full-text, nonché il numero totale di righe.Consider the amount of change occurring in the tables being full-text indexed, as well as the total number of rows. Se il numero totale di righe modificate sommato al numero di righe della tabella presenti durante l'ultimo popolamento full-text corrisponde a milioni di righe, assegnare la tabella al relativo catalogo full-text.If the total number of rows being changed, together with the number of rows in the table present during the last full-text population, represents millions of rows, assign the table to its own full-text catalog.

Associare un indice univocoAssociate a unique index

Selezionare sempre il più piccolo indice univoco disponibile per la chiave univoca full-text.Always select the smallest unique index available for your full-text unique key. Un indice basato su valori interi a quattro byte è l'impostazione ottimale. Ciò consente di ridurre notevolmente le risorse richieste dal servizio MicrosoftMicrosoft Search nel file system.(A 4-byte, integer-based index is optimal.) This significantly reduces the resources required by MicrosoftMicrosoft Search service in the file system. Se la chiave primaria è di grandi dimensioni (oltre 100 byte), considerare la possibilità di scegliere un altro indice univoco nella tabella (o di creare un altro indice univoco) come chiave univoca full-text.If the primary key is large (over 100 bytes), consider choosing another unique index in the table (or creating another unique index) as the full-text unique key. In caso contrario, se le dimensioni della chiave univoca raggiungono il massimo consentito (900 byte), non sarà possibile eseguire il popolamento full-text.Otherwise, if the full-text unique key size exceeds the maximum size allowed (900 bytes), full-text population will not be able to proceed.

Associare un elenco di parole non significativeAssociate a stoplist

Un elenco di parole non significative è un elenco di termini che non vengono considerati nelle query,A stoplist is a list of stopwords, also known as noise words. viene associato a ogni indice full-text e le parole in esso contenute vengono applicate alle query full-text di quell'indice.A stoplist is associated with each full-text index, and the words in that stoplist are applied to full-text queries on that index. Per impostazione predefinita, a un nuovo indice full-text viene associato l'elenco di parole non significative di sistema.By default, the system stoplist is associated with a new full-text index. È anche possibile creare e usare un elenco di parole non significative personalizzato.You can create and use your own stoplist too.

Ad esempio, l'istruzione CREATE FULLTEXT STOPLIST Transact-SQLTransact-SQL seguente consente di creare un nuovo elenco di parole non significative full-text denominato myStoplist, copiando dall'elenco di parole non significative di sistema:For example, the following CREATE FULLTEXT STOPLIST Transact-SQLTransact-SQL statement creates a new full-text stoplist named myStoplist by copying from the system stoplist:

CREATE FULLTEXT STOPLIST myStoplist FROM SYSTEM STOPLIST;  
GO  

L'istruzione ALTER FULLTEXT STOPLIST Transact-SQLTransact-SQL seguente consente di modificare un elenco di parole non significative denominato myStoplist, aggiungendo la parola "en" per lo spagnolo e poi per il francese:The following ALTER FULLTEXT STOPLIST Transact-SQLTransact-SQL statement alters a stoplist named myStoplist, adding the word 'en', first for Spanish and then for French:

ALTER FULLTEXT STOPLIST myStoplist ADD 'en' LANGUAGE 'Spanish';  
ALTER FULLTEXT STOPLIST myStoplist ADD 'en' LANGUAGE 'French';  
GO  

Per altre informazioni, vedere Configurare e gestire parole non significative ed elenchi di parole non significative per la ricerca full-text.For more information, see Configure and Manage Stopwords and Stoplists for Full-Text Search.

Aggiornare un indice full-textUpdate a full-text index

Come i normali indici SQL ServerSQL Server , gli indici full-text possono essere aggiornati automaticamente alla modifica dei dati delle tabelle associate.Like regular SQL ServerSQL Server indexes, full-text indexes can be automatically updated as data is modified in the associated tables. Questo è il comportamento predefinito.This is the default behavior. In alternativa, è possibile aggiornare gli indici full-text manualmente o a intervalli pianificati specificati.Alternatively, you can keep your full-text indexes up-to-date manually, or at specified scheduled intervals. Il popolamento di un indice full-text può richiedere molto tempo e risorse.Populating a full-text index can be time-consuming and resource-intensive. L'aggiornamento dell'indice full-text viene pertanto eseguito di solito in background come processo asincrono in seguito alle modifiche apportate alla tabella di base.Therefore, index updating is usually performed as an asynchronous process that runs in the background and keeps the full-text index up to date after modifications in the base table.

Anche l'aggiornamento immediato di un indice full-text dopo ogni modifica apportata alla tabella di base può richiedere l'uso di molte risorse.Updating a full-text index immediately after each change in the base table is also resource-intensive. Pertanto, se la frequenza con cui si eseguono aggiornamenti, inserimenti ed eliminazioni è elevata, è possibile notare un calo delle prestazioni delle query.Therefore, if you have a high update/insert/delete rate, you may experience some degradation in query performance. In questo caso, considerare la pianificazione di aggiornamenti con rilevamento manuale delle modifiche per gestire gradualmente le numerose modifiche, anziché dividere le risorse con le query.If this occurs, consider scheduling manual change tracking updates to keep up with the numerous changes from time to time, rather than competing with queries for resources.

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

Passaggi successiviNext steps

Dopo aver configurato la ricerca full-text di SQL Server, si è pronti per eseguire query full-text.After you set up SQL Server Full-Text Search, you're ready to run full-text queries. Per altre informazioni, vedere Eseguire query con ricerca full-text.For more info, see Query with Full-Text Search.