Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
I database di SQL Server sono abilitati per la ricerca full-text per impostazione predefinita. Tuttavia, per usare un indice full-text in una tabella, è necessario configurare la funzionalità di indicizzazione full-text sulle colonne delle tabelle a cui si vuole accedere tramite il motore di Full-Text.
Configurazione di un database per la ricerca Full-Text
Per qualsiasi scenario, un amministratore di database esegue i passaggi di base seguenti per configurare le colonne di tabella in un database per la ricerca full-text:
Creare un catalogo di testo completo.
In ogni tabella in cui si vuole eseguire la ricerca, creare un indice full-text in base a:
Identificare ogni colonna di testo che si desidera includere nell'indice full-text.
Se una determinata colonna contiene documenti archiviati come dati binari (
varbinary(max)
oimage
dati), è necessario specificare una colonna di tabella (la colonna di tipo) che identifica il tipo di ogni documento nella colonna indicizzata.Specificare la lingua che si desidera utilizzare per la ricerca full-text nei documenti contenuti nella colonna.
Scegliere il meccanismo di rilevamento delle modifiche da usare nell'indice full-text per tenere traccia delle modifiche nella tabella di base e nelle relative colonne.
La ricerca full-text supporta più lingue tramite l'uso dei componenti linguistici seguenti: word breaker e stemmer, elenchi di parole omesse (note anche come parole non significative) e file del thesaurus. I file del thesaurus e, in alcuni casi, gli elenchi di parole non significative richiedono la configurazione da parte di un amministratore di database. Un dato file del thesaurus supporta tutti gli indici full text che usano la lingua corrispondente e un dato elenco di parole non significative può essere associato a tutti gli indici full text desiderati.
Configurazione di un catalogo Full-Text e di un indice Full-Text
Questa operazione prevede i passaggi di base seguenti:
Creare un catalogo di testo completo per archiviare gli indici di testo completo.
Ogni indice testo completo deve appartenere a un catalogo testo completo. È possibile creare un catalogo di testo separato per ogni indice full-text oppure associare più indici full-text a un determinato catalogo. Un catalogo full-text è un oggetto virtuale e non appartiene ad alcun filegroup. Il catalogo è un concetto logico che fa riferimento a un gruppo di indici full-text.
Creare un indice full-text nella tabella o nella vista indicizzata.
Un indice full-text è un tipo speciale di indice funzionale basato su token compilato e gestito dal motore di Full-Text. Per creare una ricerca full-text su una tabella o vista, la tabella o vista deve avere un indice univoco costituito da una singola colonna e non annullabile. Il motore di Full-Text richiede questo indice univoco per eseguire il mapping di ogni riga della tabella a una chiave comprimibile univoca. Un indice full-text può includere
char
,varchar
,nchar
,nvarchar
,text
,ntext
,image
,xml
,varbinary
evarbinary(max)
colonne. Per altre informazioni, vedere Creare e gestire indici full-text.
Prima di imparare a creare indici full-text, è importante considerare come differiscono dagli indici normali di SQL Server. Nella tabella seguente sono elencate le differenze.
Indici di testo completo | Indici regolari di SQL Server |
---|---|
È consentito un solo indice full-text per ogni tabella. | Sono consentiti diversi indici regolari per ogni tabella. |
L'aggiunta di dati agli indici full-text, denominata popolamento, può essere richiesta tramite una pianificazione o una richiesta specifica oppure può verificarsi automaticamente con l'aggiunta di nuovi dati. | Aggiornato automaticamente quando i dati su cui sono basati vengono inseriti, aggiornati o eliminati. |
Raggruppati nello stesso database in uno o più cataloghi di testo completo. | Non raggruppato. |
Scelta delle opzioni per un indice Full-Text
Questa sezione illustra quanto segue:
Scelta della lingua della colonna
Scelta di un filegroup per un indice full-text
Assegnazione dell'indice full-text a un catalogo full-text
Associare un elenco di parole non significative all'indice di testo completo
Aggiornamento di un indice a testo completo
Scelta della lingua della colonna
Per informazioni sugli aspetti da considerare quando si sceglie la lingua della colonna, vedere Scegli una Lingua Quando Crei un Indice Full-Text.
Scelta di un filegroup per un indice Full-Text
Il processo di compilazione di un indice full-text è piuttosto intensivo di I/O (ad alto livello, consiste nella lettura dei dati da SQL Server e quindi nella propagazione dei dati filtrati all'indice full-text). 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.
Quando la facilità di gestione è importante per l'utente, è consigliabile archiviare i dati della tabella e tutti i cataloghi full-text associati nello stesso filegroup. In alcuni casi, per motivi di prestazioni, potrebbe essere necessario disporre dei dati della tabella e dell'indice full-text in filegroup diversi archiviati in volumi diversi per ottimizzare il parallelismo di I/O.
Assegnazione dell'indice Full-Text a un catalogo Full-Text
È importante pianificare la posizione degli indici di testo completo per le tabelle nei cataloghi di testo completo.
È 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. 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.
Quando assegni una tabella a un catalogo di testo completo, considera le linee guida seguenti:
Scegli sempre l'indice univoco più piccolo disponibile per la chiave univoca per il testo completo. Un indice basato su integer a 4 byte è ottimale. Ciò riduce significativamente le risorse richieste dal servizio Microsoft Search nel file system. Se la chiave primaria è grande (oltre 100 byte), considera di scegliere un altro indice univoco nella tabella (o di crearne un altro) come chiave univoca a testo completo. In caso contrario, se le dimensioni della chiave univoca full-text superano il massimo consentito (900 byte), non sarà possibile procedere con il popolamento full-text.
Se stai indicizzando una tabella con milioni di righe, assegna la tabella al proprio catalogo full-text.
Si consideri la quantità di modifiche apportate nelle tabelle indicizzate full-text, nonché il numero totale di righe. Se il numero totale di righe da modificare, insieme al numero di righe nella tabella presente durante l'ultimo popolamento full-text, rappresenta milioni di righe, assegna la tabella al suo catalogo full-text.
Associazione di un elenco di parole non significative all'indice Full-Text
SQL Server 2008 introduce le stoplist. Una stoplist è un elenco di stopwords, anche conosciute come parole di rumore. Un stoplist è associato a ogni indice full-text e le parole in esso contenute sono applicate alle query full-text di quell'indice. Per impostazione predefinita, l'elenco di parole non significative di sistema è associato a un nuovo indice full-text. Tuttavia, puoi creare e usare una tua lista di stopwords. Per ulteriori informazioni, consultare Configurare e gestire parole irrilevanti ed elenchi di parole irrilevanti per la ricerca full-text.
Ad esempio, l'istruzione CREATE FULLTEXT STOPLISTTransact-SQL seguente crea un nuovo stoplist full-text chiamato myStoplist3 copiando dallo stoplist di sistema.
CREATE FULLTEXT STOPLIST myStoplist FROM SYSTEM STOPLIST;
GO
L'istruzione ALTER FULLTEXT STOPLISTTransact-SQL seguente modifica uno stoplist denominato myStoplist, aggiungendo la parola 'en' prima per lo spagnolo, poi per il francese.
ALTER FULLTEXT STOPLIST MyStoplist ADD 'en' LANGUAGE 'Spanish';
ALTER FULLTEXT STOPLIST MyStoplist ADD 'en' LANGUAGE 'French';
GO
Aggiornamento di un indice Full-Text
Come i normali indici SQL Server, gli indici full-text possono essere aggiornati automaticamente alla modifica dei dati delle tabelle associate. Si tratta del comportamento predefinito. In alternativa, è possibile mantenere gli indici full-text up-to-date manualmente o a intervalli pianificati specificati. Il popolamento di un indice full-text può richiedere molto tempo e un uso intensivo delle risorse, pertanto l'aggiornamento dell'indice viene in genere eseguito come processo asincrono eseguito in background e mantiene aggiornato l'indice full-text dopo le modifiche nella tabella di base. L'aggiornamento di un indice full-text subito dopo ogni modifica nella tabella di base può richiedere un elevato utilizzo di risorse. Pertanto, se si dispone di una frequenza di aggiornamento/inserimento/eliminazione molto elevata, è possibile che si verifichi una riduzione delle prestazioni delle query. In questo caso, prendere in considerazione la programmazione di aggiornamenti manuali per il tracciamento delle modifiche per tenere il passo con le numerose modifiche di tanto in tanto, anziché competere con le query per le risorse.
Per monitorare lo stato della popolazione, utilizzare le funzioni FULLTEXTCATALOGPROPERTY o OBJECTPROPERTYEX. Per ottenere lo stato del popolamento del catalogo, eseguire l'istruzione seguente:
SELECT FULLTEXTCATALOGPROPERTY('AdvWksDocFTCat', 'Populatestatus');
In genere, se è in corso un popolamento completo, il risultato restituito è 1.
Esempio: Configurazione della ricerca Full-Text
Nell'esempio in due parti seguente viene creato un catalogo full-text denominato AdvWksDocFTCat
nel database AdventureWorks e quindi viene creato un indice full-text nella Document
tabella in AdventureWorks2012. Questa istruzione crea il catalogo full-text nella directory predefinita specificata durante l'installazione. La cartella denominata AdvWksDocFTCat
si trova nella directory predefinita.
Per creare un catalogo full-text denominato
AdvWksDocFTCat
, nell'esempio viene usata un'istruzione CREATE FULLTEXT CATALOG :USE AdventureWorks; GO CREATE FULLTEXT CATALOG AdvWksDocFTCat;
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. L'istruzione CREATE INDEX seguente consente di creare un indice univoco,
ui_ukDoc
, nella colonna DocumentID della tabella Document:CREATE UNIQUE INDEX ui_ukDoc ON Production.Document(DocumentID);
Quando si dispone di una chiave univoca, è possibile creare un indice full-text nella tabella
Document
usando l'istruzione CREATE FULLTEXT INDEX seguente.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). La colonna type archivia l'estensione di file fornita dall'utente".doc", ".xls" e quindi on-of il documento in una determinata riga. 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. Dopo che il filtro ha analizzato i dati binari della riga, il word breaker specificato analizzerà il contenuto (in questo esempio viene usato il word breaker per l'inglese britannico). Si noti che il processo di filtro avviene solo in fase di indicizzazione o se un utente inserisce o aggiorna una colonna nella tabella di base mentre il rilevamento automatico delle modifiche è abilitato per l'indice full-text. Per altre informazioni, vedere Configurare e gestire i filtri per la ricerca.
Attività comuni
Per creare un catalogo Full-Text
Per visualizzare gli indici di una tabella (o vista)
Per creare un indice univoco
Per creare un indice Full-Text
Per visualizzare informazioni su un indice Full-Text
Catalogo o vista di gestione dinamica | Descrizione |
---|---|
sys.fulltext_index_catalog_usages (Transact-SQL) | Restituisce una riga per ogni catalogo full-text che fa riferimento a un 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 di testo completo di un oggetto tabellare. |
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 sulle operazioni di popolamento degli indici full-text in corso. |
Vedere anche
CREA CATALOGO TESTO PIENO (Transact-SQL)
CREATE FULLTEXT INDEX (Transact-SQL)
CREATE FULLTEXT STOPLIST (Transact-SQL)
CREATE TABLE (Transact-SQL)
Popolare gli Indici di Testo Completo
FULLTEXTCATALOGPROPERTY (Transact-SQL)
OBJECTPROPERTYEX (Transact-SQL)