Abilitare la ricerca semantica in tabelle e colonne
Si applica a: SQL Server
Viene descritto come abilitare o disabilitare l'indicizzazione semantica statistica in colonne selezionate contenenti documenti o testo.
Nella ricerca semantica statistica vengono utilizzati gli indici creati dalla ricerca full-text e indici extra. Come risultato di questa dipendenza dalla ricerca full-text, viene creato un nuovo indice semantico quando si definisce un nuovo indice full-text o si modifica un indice full-text esistente. È possibile creare un nuovo indice semantico utilizzando le istruzioni Transact-SQL o l'Indicizzazione guidata full-text e le altre finestre di dialogo di SQL Server Management Studio, come descritto in questo articolo.
Creare un indice semantico
Requisiti e restrizioni per la creazione di un indice semantico
È possibile creare un indice in qualsiasi oggetto di database supportato per l'indicizzazione full-text, incluse tabelle e viste indicizzate.
Prima che sia possibile abilitare l'indicizzazione semantica per colonne specifiche, devono esistere i prerequisiti riportati di seguito.
Deve esistere un catalogo full-text per il database.
La tabella deve disporre di un indice full-text.
Le colonne selezionate devono far parte dell'indice full-text.
È possibile creare e abilitare contemporaneamente tutti questi prerequisiti.
È possibile creare un indice semantico in colonne che includono qualsiasi tipo di dati supportato per l'indicizzazione full-text. Per altre informazioni, vedere Creare e gestire indici full-text.
È possibile specificare qualsiasi tipo di documento supportato per l'indicizzazione full-text per colonne varbinary(max) . Per ulteriori informazioni, vedi Procedura: Determinare quali tipi di documento possono essere indicizzati in questo articolo.
L'indicizzazione semantica consente di creare due tipi di indici per le colonne selezionate, ovvero un indice di frasi chiave e un indice di somiglianza del documento. Non è possibile selezionare solo uno dei due tipi di indice quando si abilita l'indicizzazione semantica. È tuttavia possibile eseguire query indipendenti su questi due indici. Per altre informazioni, vedere Trovare frasi chiave nei documenti mediante ricerca semantica e Trovare documenti simili e correlati tramite la ricerca semantica.
Se non specifichi in modo esplicito un LCID per un indice semantico, per l'indicizzazione semantica vengono utilizzate solo la lingua principale e le statistiche sulla lingua associate.
Se specifichi una lingua per una colonna per cui non è disponibile il modello linguistico, la creazione dell'indice ha esito negativo e restituisce un messaggio di errore.
Creare un indice semantico quando non esiste alcun indice full-text
Quando crei un nuovo indice full-text con l'istruzione CREATE FULLTEXT INDEX
puoi abilitare l'indicizzazione semantica a livello di colonna specificando la parola chiave STATISTICAL_SEMANTICS
come parte della definizione di colonna. È inoltre possibile abilitare l'indicizzazione semantica quando si utilizza l'Indicizzazione guidata full-text per creare un nuovo indice full-text.
Creare un nuovo indice semantico tramite Transact-SQL
Chiama l'istruzione CREATE FULLTEXT INDEX
e specifica STATISTICAL_SEMANTICS
per ogni colonna in cui vuoi creare un indice semantico. Per ulteriori informazioni su tutte le opzioni per questa istruzione, vedi CREATE FULLTEXT INDEX (Transact-SQL).
Esempio 1: creazione di un indice univoco, di un indice full-text e di un indice semantico
L'esempio riportato di seguito crea il catalogo full-text predefinito, ft
. Nell'esempio viene creato un indice univoco sulla colonna JobCandidateID
della tabella HumanResources.JobCandidate
del database di esempio AdventureWorks2022
. Questo indice univoco è necessario come colonna chiave di un indice full-text. L'esempio crea infine un indice full-text e un indice semantico nella colonna Resume
.
CREATE FULLTEXT CATALOG ft AS DEFAULT
GO
CREATE UNIQUE INDEX ui_ukJobCand
ON HumanResources.JobCandidate(JobCandidateID)
GO
CREATE FULLTEXT INDEX ON HumanResources.JobCandidate
(Resume
Language 1033
Statistical_Semantics
)
KEY INDEX JobCandidateID
WITH STOPLIST = SYSTEM
GO
Esempio: creazione di un indice full-text e semantico in diverse colonne con popolamento dell'indice posticipato
Nell'esempio seguente viene creato un catalogo full-text, documents_catalog
, nel database di esempio AdventureWorks2022
. Nell'esempio viene quindi creato un indice full-text che utilizza questo nuovo catalogo. L'indice full-text viene creato per le colonne Title
, DocumentSummary
e Document
della tabella Production.Document
, mentre l'indice semantico viene creato solo per la colonna Document
. Questo indice full-text utilizza il catalogo full-text appena creato e un indice di chiave univoca esistente, PK_Document_DocumentID
. Come consigliato, questa chiave di indice viene creata in una colonna di valori interi, DocumentID
. Nell'esempio viene specificato l'LCID 1033 per l'inglese, che identifica la lingua dei dati presenti nelle colonne.
Nell'esempio viene anche specificato che il rilevamento delle modifiche è disabilitato e che non viene eseguito il popolamento. In un secondo momento, durante le ore di minore attività, nell'esempio viene utilizzata un'istruzione ALTER FULLTEXT INDEX
per avviare la popolazione completa del nuovo indice e abilitare il rilevamento delle modifiche automatico.
CREATE FULLTEXT CATALOG documents_catalog
GO
CREATE FULLTEXT INDEX ON Production.Document
(
Title
Language 1033,
DocumentSummary
Language 1033,
Document
TYPE COLUMN FileExtension
Language 1033
Statistical_Semantics
)
KEY INDEX PK_Document_DocumentID
ON documents_catalog
WITH CHANGE_TRACKING OFF, NO POPULATION
GO
In un secondo momento, in un orario di minore attività, l'indice viene popolato:
ALTER FULLTEXT INDEX ON Production.Document SET CHANGE_TRACKING AUTO
GO
Creare un nuovo indice semantico tramite SQL Server Management Studio
Eseguire l'Indicizzazione guidata full-text e abilitare Semantica statistica nella pagina Selezione colonne tabella per ogni colonna in cui creare un indice semantico. Per altre informazioni, comprese le informazioni sulla modalità di avvio dell'Indicizzazione guidata full-text, vedere Usare l'Indicizzazione guidata full-text.
Creare un indice semantico quando esiste un indice full-text
È possibile aggiungere un'indicizzazione semantica quando si modifica un indice full-text esistente tramite l'istruzione ALTER FULLTEXT INDEX
. È inoltre possibile aggiungere l'indicizzazione semantica utilizzando le varie finestre di dialogo in SQL Server Management Studio.
Aggiungere un indice semantico tramite Transact-SQL
Chiama l'istruzione ALTER FULLTEXT INDEX
con le opzioni descritte nella sezione seguente per ogni colonna in cui vuoi aggiungere un indice semantico. Per ulteriori informazioni su tutte le opzioni per questa istruzione, vedi ALTER FULLTEXT INDEX (Transact-SQL).
Se non diversamente specificato, dopo una chiamata ad ALTER
vengono ripopolati sia gli indici full-text, sia gli indici semantici.
Per aggiungere l'indice full-text solo a una colonna, usa la sintassi
ADD
.Per aggiungere l'indicizzazione sia full-text che semantica a una colonna, usa la sintassi
ADD
con l'opzioneSTATISTICAL_SEMANTICS
.Per aggiungere l'indicizzazione semantica a una colonna già abilitata per l'indicizzazione full-text, usare l'opzione
ADD STATISTICAL_SEMANTICS
. È possibile aggiungere l'indicizzazione semantica solo a una colonna in una singola istruzioneALTER
.
Esempio: aggiunta di indicizzazione semantica a una colonna già abilitata per l'indicizzazione full-text
Nell'esempio seguente viene modificato un indice full-text esistente nella tabella Production.Document
del database di esempio AdventureWorks2022
. Nell'esempio viene aggiunto un indice semantico nella colonna Document
della tabella Production.Document
, in cui è già presente un indice full-text. Nell'esempio viene specificato che l'indice non verrà ripopolato automaticamente.
ALTER FULLTEXT INDEX ON Production.Document
ALTER COLUMN Document
ADD Statistical_Semantics
WITH NO POPULATION
GO
Aggiungere un indice semantico tramite SQL Server Management Studio
È possibile modificare le colonne abilitate per l'indicizzazione semantica e full-text nella pagina Colonne indice full-text della finestra di dialogo Proprietà indice full-text . Per altre informazioni, vedere Gestire indici full-text.
Modificare un indice semantico
Requisiti e restrizioni per la modifica di un indice esistente
Non è possibile modificare un indice esistente mentre è in corso la popolazione dell'indice. Per altre informazioni sul monitoraggio dello stato di popolamento dell'indice, vedere Gestire e monitorare la ricerca semantica.
Non è possibile aggiungere l'indicizzazione a una colonna e modificare o eliminare l'indicizzazione per la stessa colonna in una singola chiamata all'istruzione
ALTER FULLTEXT INDEX
.
Eliminare un indice semantico
È possibile eliminare un'indicizzazione semantica quando si modifica un indice full-text esistente tramite l'istruzione ALTER FULLTEXT INDEX
. È inoltre possibile eliminare l'indicizzazione semantica utilizzando le varie finestre di dialogo in SQL Server Management Studio.
Eliminare l'indice semantico tramite Transact-SQL
Per eliminare l'indicizzazione semantica solo da una colonna o da colonne, chiama l'istruzione ALTER FULLTEXT INDEX
con l'opzione ALTER COLUMN <column_name> DROP STATISTICAL_SEMANTICS
. È possibile eliminare l'indicizzazione da più colonne in una singola istruzione ALTER
.
USE database_name;
GO
ALTER FULLTEXT INDEX
ALTER COLUMN column_name
DROP STATISTICAL_SEMANTICS;
GO
Per eliminare sia l'indicizzazione full-text che quella semantica da una colonna, chiama l'istruzione ALTER FULLTEXT INDEX
con l'opzione ALTER COLUMN <column_name> DROP
.
USE database_name;
GO
ALTER FULLTEXT INDEX
ALTER COLUMN column_name
DROP;
GO
Eliminare un indice semantico con SQL Server Management Studio
È possibile modificare le colonne abilitate per l'indicizzazione semantica e full-text nella pagina Colonne indice full-text della finestra di dialogo Proprietà indice full-text . Per altre informazioni, vedere Gestire indici full-text.
Requisiti e restrizioni per l'eliminazione di un indice semantico
Non è possibile eliminare indice full-text da una colonna mantenendo l'indicizzazione semantica. L'indicizzazione semantica dipende dall'indicizzazione full-text per i risultati di somiglianza del documento.
Non è possibile specificare l'opzione
NO POPULATION
quando si elimina l'indicizzazione semantica dall'ultima colonna in una tabella per cui è stata abilitata l'indicizzazione semantica. È necessario un ciclo di popolamento per rimuovere i risultati precedentemente indicizzati.
Verificare se la ricerca semantica è abilitata per gli oggetti di database
Verifica dell'abilitazione della ricerca semantica per un database
Esegui una query sulla proprietà IsFullTextEnabled
della funzione per i metadati DATABASEPROPERTYEX (Transact-SQL).
Un valore restituito di 1
indica che la ricerca full-text e la ricerca semantica sono abilitate per il database. Un valore restituito di 0
indica che non sono abilitate.
SELECT DATABASEPROPERTYEX('database_name', 'IsFullTextEnabled');
GO
Verifica dell'abilitazione della ricerca semantica per una tabella
Esegui una query sulla proprietà TableFullTextSemanticExtraction
della funzione per i metadati OBJECTPROPERTYEX (Transact-SQL).
Un valore restituito di 1 indica che la ricerca semantica è abilitata per la tabella, mentre un valore restituito di 0 indica che la ricerca non è abilitata.
SELECT OBJECTPROPERTYEX(OBJECT_ID('table_name'), 'TableFullTextSemanticExtraction')
GO
Verifica dell'abilitazione della ricerca semantica per una colonna
Per determinare se la ricerca semantica è abilitata per una colonna specifica:
Esegui una query sulla proprietà
StatisticalSemantics
della funzione per i metadati COLUMNPROPERTY (Transact-SQL).Un valore restituito di 1 indica che la ricerca semantica è abilitata per la colonna, mentre un valore restituito di 0 indica che la ricerca non è abilitata.
SELECT COLUMNPROPERTY(OBJECT_ID('table_name'), 'column_name', 'StatisticalSemantics'); GO
Esegui una query sulla vista del catalogo sys.fulltext_index_columns (Transact-SQL) per l'indice full-text.
Il valore 1 nella colonna
statistical_semantics
indica che la colonna specificata è abilitata per l'indicizzazione semantica oltre che per l'indicizzazione full-text.SELECT * FROM sys.fulltext_index_columns WHERE object_id = OBJECT_ID('table_name'); GO
In Esplora oggetti in Management Studio, fai clic con il pulsante destro del mouse su una colonna e scegli Proprietà. Nella pagina Generale della finestra di dialogo Proprietà colonna verificare il valore della proprietà Semantica statistica .
Il valore True indica che la colonna specificata è abilitata per l'indicizzazione semantica oltre che per l'indicizzazione full-text.
Determinare ciò che può essere indicizzato per la ricerca semantica
Verificare quali lingue sono supportate per la ricerca semantica
L'indicizzazione semantica supporta un numero minore di lingue rispetto all'indicizzazione full-text. Di conseguenza, alcune colonne supportano l'indicizzazione full-text, ma non l'indicizzazione semantica.
Esegui una query sulla vista del catalogo sys.fulltext_semantic_languages (Transact-SQL).
SELECT * FROM sys.fulltext_semantic_languages;
GO
Per l'indicizzazione semantica sono supportate le lingue seguenti. Questo elenco rappresenta l'output della vista del catalogo sys.fulltext_semantic_languages (Transact-SQL), ordinato per LCID.
Lingua | LCID |
---|---|
Cinese tradizionale | 1028 |
Tedesco | 1031 |
Inglese (Stati Uniti) | 1033 |
Francese | 1036 |
Italiano | 1040 |
Portoghese (Brasile) | 1046 |
Russo | 1049 |
Svedese | 1053 |
Cinese semplificato | 2052 |
Inglese (Regno Unito) | 2057 |
Portoghese | 2070 |
Cinese (RAS di Hong Kong, RPC) | 2070 |
Spagnolo | 3082 |
Cinese (Singapore) | 4100 |
Cinese (RAS di Macao) | 5124 |
Nota
Se i risultati sono vuoti, devi scaricare e installare il database Semantic Language Statistics. Per ulteriori informazioni, vedi Installare, allegare e registrare il database Semantic Language Statistics.
Determinare quali tipi di documenti è possibile indicizzare
Esegui una query sulla vista del catalogo sys.fulltext_document_types (Transact-SQL).
Se il tipo di documento che vuoi indicizzare non è nell'elenco di tipi supportati, può essere necessario individuare, scaricare e installare filtri aggiuntivi. Per altre informazioni, vedere Visualizzazione o modifica di word breaker e filtri registrati.
Procedura consigliata: creare un filegroup separato per gli indici full-text e semantici
Valutare se creare un filegroup distinto per gli indici full-text e semantici se l'allocazione di spazio su disco costituisce un problema. Gli indici semantici vengono creati nello stesso filegroup dell'indice full-text. Un indice semantico completamente popolato può contenere una notevole quantità di dati.
Problema: la ricerca in una colonna specifica non restituisce risultati
È possibile che sia stato specificato un LCID non Unicode per una lingua Unicode.
È possibile abilitare l'indicizzazione semantica in un tipo di colonna non Unicode con un LCID per una lingua che include solo parole Unicode, ad esempio l'LCID 1049 per il russo. In questo caso, non viene restituito alcun risultato dagli indici semantici in questa colonna.