Abilitare la ricerca semantica in tabelle e colonneEnable Semantic Search on Tables and Columns

Viene descritto come abilitare o disabilitare l'indicizzazione semantica statistica in colonne selezionate contenenti documenti o testo.Describes how to enable or disable statistical semantic indexing on selected columns that contain documents or text.

Nella ricerca semantica statistica vengono utilizzati gli indici creati dalla ricerca full-text e vengono creati indici aggiuntivi.Statistical Semantic Search uses the indexes that are created by Full-Text Search, and creates additional indexes. 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.As a result of this dependency on full-text search, you create a new semantic index when you define a new full-text index, or when you alter an existing full-text index. È possibile creare un nuovo indice semantico utilizzando le istruzioni Transact-SQLTransact-SQL o l'Indicizzazione guidata full-text e le altre finestre di dialogo di SQL Server Management StudioSQL Server Management Studio, come descritto in questo argomento.You can create a new semantic index by using Transact-SQLTransact-SQL statements, or by using the Full-Text Indexing Wizard and other dialog boxes in SQL Server Management StudioSQL Server Management Studio, as described in this topic.

Creare un indice semantico Create a semantic index

Requisiti e restrizioni per la creazione di un indice semantico Requirements and restrictions for creating a semantic index

  • È possibile creare un indice in qualsiasi oggetto di database supportato per l'indicizzazione full-text, incluse tabelle e viste indicizzate.You can create an index on any of the database objects that are supported for full-text indexing, including tables and indexed views.

  • Prima che sia possibile abilitare l'indicizzazione semantica per colonne specifiche, devono esistere i prerequisiti riportati di seguito.Before you can enable semantic indexing for specific columns, the following prerequisites must exist:

    • Deve esistere un catalogo full-text per il database.A full-text catalog must exist for the database.

    • La tabella deve disporre di un indice full-text.The table must have a full-text index.

    • Le colonne selezionate devono far parte dell'indice full-text.The selected columns must participate in the full-text index.

      È possibile creare e abilitare contemporaneamente tutti questi prerequisiti.You can create and enable all these requirements at the same time.

  • È possibile creare un indice semantico in colonne che includono qualsiasi tipo di dati supportato per l'indicizzazione full-text.You can create a semantic index on columns that have any of the data types that are supported for full-text indexing. Per altre informazioni, vedere Creare e gestire indici full-text.For more information, see Create and Manage Full-Text Indexes.

  • È possibile specificare qualsiasi tipo di documento supportato per l'indicizzazione full-text per colonne varbinary(max) .You can specify any document type that is supported for full-text indexing for varbinary(max) columns. Per ulteriori informazioni, vedere Procedura: determinare quali tipi di documenti è possibile indicizzare in questo argomento.For more information, see How To: Determine Which Document Types Can Be Indexed in this topic.

  • 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.Semantic indexing creates two types of indexes for the columns that you select – an index of key phrases, and an index of document similarity. Non è possibile selezionare solo uno dei due tipi di indice quando si abilita l'indicizzazione semantica.You cannot select only one type of index or the other when you enable semantic indexing. È tuttavia possibile eseguire query indipendenti su questi due indici.However you can query these two indexes independently. Per altre informazioni, vedere Trovare frasi chiave nei documenti mediante ricerca semantica e Trovare documenti simili e correlati tramite la ricerca semantica.For more information, see Find Key Phrases in Documents with Semantic Search and Find Similar and Related Documents with Semantic Search.

  • Se non si specifica 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.If you do not explicitly specify an LCID for a semantic index, then only the primary language and its associated language statistics are used for semantic indexing.

  • Se si specifica una lingua per una colonna per cui non è disponibile il modello di lingua, la creazione dell'indice ha esito negativo e viene restituito un messaggio di errore.If you specify a language for a column for which the language model is not available, the creation of the index fails and returns an error message.

Creare un indice semantico quando non esiste alcun indice full-text Create a semantic index when there is no full-text index

Quando si crea un nuovo indice full-text con l'istruzione CREATE FULLTEXT INDEX , è possibile abilitare l'indicizzazione semantica a livello di colonna specificando la parola chiave STATISTICAL_SEMANTICS come parte della definizione della colonna.When you create a new full-text index with the CREATE FULLTEXT INDEX statement, you can enable semantic indexing at the column level by specifying the keyword STATISTICAL_SEMANTICS as part of the column definition. È inoltre possibile abilitare l'indicizzazione semantica quando si utilizza l'Indicizzazione guidata full-text per creare un nuovo indice full-text.You can also enable semantic indexing when you use the Full-Text Indexing Wizard to create a new full-text index.

Creare un nuovo indice semantico tramite Transact-SQLCreate a new semantic index by using Transact-SQL

Chiamare l'istruzione CREATE FULLTEXT INDEX e specificare STATISTICAL_SEMANTICS per ogni colonna in cui creare un indice semantico.Call the CREATE FULLTEXT INDEX statement and specify STATISTICAL_SEMANTICS for each column on which you want to create a semantic index. Per altre informazioni su tutte le opzioni per questa istruzione, vedere CREATE FULLTEXT INDEX (Transact-SQL).For more information about all the options for this statement, see CREATE FULLTEXT INDEX (Transact-SQL).

Esempio 1: creazione di un indice univoco, di un indice full-text e di un indice semanticoExample 1: Create a unique index, full-text index, and semantic index

L'esempio riportato di seguito crea il catalogo full-text predefinito ft. L'esempio crea quindi un indice univoco nella colonna JobCandidateID della tabella HumanResources.JobCandidate del database di esempio AdventureWorks2012.The following example creates a default full-text catalog, ft. The example then creates a unique index on the JobCandidateID column of the HumanResources.JobCandidate table of the AdventureWorks2012 sample database. Questo indice univoco è necessario come colonna chiave di un indice full-text.This unique index is required as the key column for a full-text index. L'esempio crea infine un indice full-text e un indice semantico nella colonna Resume .The example then creates a full-text index and a semantic index on the Resume column.

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 posticipatoExample 2: Create a full-text and semantic index on several columns with delayed index population

L'esempio seguente crea un catalogo full-text documents_catalognel database di esempio AdventureWorks2012.The following example creates a full-text catalog, documents_catalog, in the AdventureWorks2012 sample database. Nell'esempio viene quindi creato un indice full-text che utilizza questo nuovo catalogo.The example then creates a full-text index that uses this new catalog. L'indice full-text viene creato per le colonne Title, DocumentSummarye Document della tabella Production.Document , mentre l'indice semantico viene creato solo per la colonna Document .The full-text index is created on the Title, DocumentSummary, and Document columns of the Production.Document table, while the semantic index is only created on the Document column. Questo indice full-text usa il catalogo full-text appena creato e un indice di chiave univoca esistente, PK_Document_DocumentID.This full-text index uses the newly-created full-text catalog and an existing unique key index, PK_Document_DocumentID. Come consigliato, questa chiave di indice viene creata in una colonna Integer, DocumentID.As recommended, this index key is created on an integer column, DocumentID. Nell'esempio viene specificato l'LCID 1033 per l'inglese, che identifica la lingua dei dati presenti nelle colonne.The example specifies the LCID for English, 1033, which is the language of the data in the columns.

Nell'esempio viene anche specificato che il rilevamento delle modifiche è disabilitato e che non viene eseguito il popolamento.This example also specifies that change tracking is off with no population. In seguito, durante le ore di minore attività, l'esempio usa un'istruzione ALTER FULLTEXT INDEX per avviare un popolamento completo nel nuovo indice e abilitare il rilevamento automatico delle modifiche.Later, during off-peak hours, the example uses an ALTER FULLTEXT INDEX statement to start a full population on the new index and enable automatic change tracking.

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:Later, at an off-peak time, the index is populated:

ALTER FULLTEXT INDEX ON Production.Document SET CHANGE_TRACKING AUTO  
GO  

Creare un nuovo indice semantico tramite SQL Server Management StudioCreate a new semantic index by using 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.Run the Full-Text Indexing Wizard and enable Statistical Semantics on the Select Table Columns page for each column on which you want to create a semantic index. Per altre informazioni, comprese le informazioni sulla modalità di avvio dell'Indicizzazione guidata full-text, vedere Usare l'Indicizzazione guidata full-text.For more information, including information about how to start the Full-Text Indexing Wizard, see Use the Full-Text Indexing Wizard.

Creare un indice semantico quando esiste un indice full-text Create a semantic index when there is an existing full-text index

È possibile aggiungere un'indicizzazione semantica quando si modifica un indice full-text esistente tramite l'istruzione ALTER FULLTEXT INDEX .You can add semantic indexing when you alter an existing full-text index with the ALTER FULLTEXT INDEX statement. È inoltre possibile aggiungere l'indicizzazione semantica utilizzando le varie finestre di dialogo in SQL Server Management StudioSQL Server Management Studio.You can also add semantic indexing by using various dialog boxes in SQL Server Management StudioSQL Server Management Studio.

Aggiungere un indice semantico tramite Transact-SQLAdd a semantic index by using Transact-SQL

Chiamare l'istruzione ALTER FULLTEXT INDEX con le opzioni descritte di seguito per ogni colonna in cui aggiungere un indice semantico.Call the ALTER FULLTEXT INDEX statement with the options described below for each column on which you want to add a semantic index. Per altre informazioni su tutte le opzioni per questa istruzione, vedere ALTER FULLTEXT INDEX (Transact-SQL).For more information about all the options for this statement, see 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.Both full-text and semantic indexes are repopulated after a call to ALTER, unless you specify otherwise.

  • Per aggiungere l'indicizzazione full-text solo a una colonna, usare la sintassi ADD .To add full-text indexing only to a column, use the ADD syntax.

  • Per aggiungere l'indicizzazione sia full-text, sia semantica a una colonna, usare la sintassi ADD con l'opzione STATISTICAL_SEMANTICS .To add both full-text and semantic indexing to a column, use the ADD syntax with the STATISTICAL_SEMANTICS option.

  • Per aggiungere l'indicizzazione semantica a una colonna già abilitata per l'indicizzazione full-text, usare l'opzione ADD STATISTICAL_SEMANTICS .To add semantic indexing to a column that is already enabled for full-text indexing, use the ADD STATISTICAL_SEMANTICS option. È possibile aggiungere l'indicizzazione semantica solo a una colonna in una singola istruzione ALTER .You can only add semantic indexing to one column in a single ALTER statement.

    Esempio: aggiunta di indicizzazione semantica a una colonna già abilitata per l'indicizzazione full-textExample: Add semantic indexing to a column that already has full-text indexing

    Nell'esempio seguente viene modificato un indice full-text esistente nella tabella Production.Document del database di esempio AdventureWorks2012.The following example alters an existing full-text index on Production.Document table in AdventureWorks2012 sample database. Nell'esempio viene aggiunto un indice semantico nella colonna Document della tabella Production.Document , in cui è già presente un indice full-text.The example adds a semantic index on the Document column of the Production.Document table, which already has a full-text index. Nell'esempio viene specificato che l'indice non verrà ripopolato automaticamente.The example specifies that the index will not be repopulated automatically.

ALTER FULLTEXT INDEX ON Production.Document  
    ALTER COLUMN Document  
        ADD Statistical_Semantics  
    WITH NO POPULATION  
GO  

Aggiungere un indice semantico tramite SQL Server Management StudioAdd a semantic index by using 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 .You can change the columns that are enabled for semantic and full-text indexing on the Full-Text Index Columns page of the Full-Text Index Properties dialog box. Per altre informazioni, vedere Gestire indici full-text.For more information, see Manage Full-Text Indexes.

Modificare un indice semanticoAlter a semantic index

Requisiti e restrizioni per la modifica di un indice esistente Requirements and restrictions for altering an existing index

  • Non è possibile modificare un indice esistente mentre è in corso il popolamento dell'indice.You cannot alter an existing index while population of the index is in progress. Per altre informazioni sul monitoraggio dello stato di popolamento dell'indice, vedere Gestire e monitorare la ricerca semantica.For more information on monitoring the progress of index population, see Manage and Monitor Semantic Search.

  • 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 .You cannot add indexing to a column, and alter or drop indexing for the same column, in a single call to the ALTER FULLTEXT INDEX statement.

Eliminare un indice semantico Drop a semantic index

È possibile eliminare un'indicizzazione semantica quando si modifica un indice full-text esistente tramite l'istruzione ALTER FULLTEXT INDEX .You can drop semantic indexing when you alter an existing full-text index with the ALTER FULLTEXT INDEX statement. È possibile eliminare inoltre l'indicizzazione semantica tramite le varie finestre di dialogo in SQL Server Management StudioSQL Server Management Studio.You can also drop semantic indexing by using various dialog boxes in SQL Server Management StudioSQL Server Management Studio.

Eliminare l'indice semantico tramite Transact-SQLDrop a semantic index by using Transact-SQL

Per eliminare l'indicizzazione semantica solo da una colonna o da più colonne, chiamare l'istruzione ALTER FULLTEXT INDEX con l'opzione ALTER COLUMNnome_colonnaDROP STATISTICAL_SEMANTICS .To drop semantic indexing only from a column or columns, call the ALTER FULLTEXT INDEX statement with the ALTER COLUMNcolumn_nameDROP STATISTICAL_SEMANTICS option. È possibile eliminare l'indicizzazione da più colonne in una singola istruzione ALTER .You can drop the indexing from multiple columns in a single ALTER statement.

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, chiamare l'istruzione ALTER FULLTEXT INDEX con l'opzione ALTER COLUMNnome_colonnaDROP .To drop both full-text and semantic indexing from a column, call the ALTER FULLTEXT INDEX statement with the ALTER COLUMNcolumn_nameDROP option.

USE database_name  
GO  

ALTER FULLTEXT INDEX  
    ALTER COLUMN column_name  
    DROP  
GO  

Eliminare un indice semantico tramite SQL Server Management StudioDrop a semantic index by using 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 .You can change the columns that are enabled for semantic and full-text indexing on the Full-Text Index Columns page of the Full-Text Index Properties dialog box. Per altre informazioni, vedere Gestire indici full-text.For more information, see Manage Full-Text Indexes.

Requirements and restrictions for dropping a semantic index Requirements and restrictions for dropping a semantic index

  • Non è possibile eliminare indicizzazione full-text da una colonna mantenendo l'indicizzazione semantica.You cannot drop full-text indexing from a column while retaining semantic indexing. L'indicizzazione semantica dipende dall'indicizzazione full-text per i risultati di somiglianza del documento.Semantic indexing depends on full-text indexing for document similarity results.

  • 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.You cannot specify the NO POPULATION option when you drop semantic indexing from the last column in a table for which semantic indexing was enabled. È necessario un ciclo di popolamento per rimuovere i risultati precedentemente indicizzati.A population cycle is required to remove the results that were indexed previously.

Verificare se la ricerca semantica è abilitata per gli oggetti di databaseCheck whether semantic search is enabled on database objects

Verifica dell'abilitazione della ricerca semantica per un databaseIs semantic search enabled for a database?

Eseguire una query sulla proprietà IsFullTextEnabled della funzione per i metadati DATABASEPROPERTYEX (Transact-SQL).Query the IsFullTextEnabled property of the DATABASEPROPERTYEX (Transact-SQL) metadata function.

Se viene restituito il valore 1, la ricerca full-text e la ricerca semantica sono abilitate per il database. Se viene restituito il valore 0, le ricerche non sono abilitate.A return value of 1 indicates that full-text search and semantic search are enabled for the database; a return value of 0 indicates that they are not enabled.

SELECT DATABASEPROPERTYEX('database_name', 'IsFullTextEnabled')  
GO  

Verifica dell'abilitazione della ricerca semantica per una tabellaIs semantic search enabled for a table?

Eseguire una query sulla proprietà TableFullTextSemanticExtraction della funzione per i metadati OBJECTPROPERTYEX (Transact-SQL).Query the TableFullTextSemanticExtraction property of the OBJECTPROPERTYEX (Transact-SQL) metadata function.

Se viene restituito il valore 1, la ricerca semantica è abilitata per la tabella. Se viene restituito il valore 0, la ricerca non è abilitata.A return value of 1 indicates that semantic search is enabled for the table; a return value of 0 indicates that it is not enabled.

SELECT OBJECTPROPERTYEX(OBJECT_ID('table_name'), 'TableFullTextSemanticExtraction')  
GO  

Verifica dell'abilitazione della ricerca semantica per una colonnaIs semantic search enabled for a column?

Per determinare se la ricerca semantica è abilitata per una colonna specifica:To determine whether semantic search is enabled for a specific column:

  • Eseguire una query sulla proprietà StatisticalSemantics della funzione per i metadati COLUMNPROPERTY (Transact-SQL).Query the StatisticalSemantics property of the COLUMNPROPERTY (Transact-SQL) metadata function.

    Se viene restituito il valore 1, la ricerca semantica è abilitata per la colonna. Se viene restituito il valore 0, la ricerca non è abilitata.A return value of 1 indicates that semantic search is enabled for the column; a return value of 0 indicates that it is not enabled.

    SELECT COLUMNPROPERTY(OBJECT_ID('table_name'), 'column_name', 'StatisticalSemantics')  
    GO  
    
  • Eseguire una query sulla vista del catalogo sys.fulltext_index_columns (Transact-SQL) per l'indice full-text.Query the catalog view sys.fulltext_index_columns (Transact-SQL) for the full-text index.

    Il valore 1 nella colonna statistical_semantics indica che la colonna specificata è abilitata per l'indicizzazione semantica oltre che per l'indicizzazione full-text.A value of 1 in the statistical_semantics column indicates that the specified column is enabled for semantic indexing in addition to full-text indexing.

    SELECT * FROM sys.fulltext_index_columns WHERE object_id = OBJECT_ID('table_name')  
    GO  
    
  • In Esplora oggetti in Management StudioManagement Studiofare clic con il pulsante destro del mouse su una colonna e scegliere Proprietà.In Object Explorer in Management StudioManagement Studio, right-click on a column and select Properties. Nella pagina Generale della finestra di dialogo Proprietà colonna verificare il valore della proprietà Semantica statistica .On the General page of the Column Properties dialog box, check the value of the Statistical Semantics property.

    Il valore True indica che la colonna specificata è abilitata per l'indicizzazione semantica oltre che per l'indicizzazione full-text.A value of True indicates that the specified column is enabled for semantic indexing in addition to full-text indexing.

Verificare quali lingue sono supportate per la ricerca semantica Check which languages are supported for Semantic Search

Importante

L'indicizzazione semantica supporta un numero minore di lingue rispetto all'indicizzazione full-text.Fewer languages are supported for semantic indexing than for full-text indexing. Di conseguenza, alcune colonne supportano l'indicizzazione full-text, ma non l'indicizzazione semantica.As a result, there may be columns that you can index for full-text search, but not for semantic search.

Eseguire una query sulla vista del catalogo sys.fulltext_semantic_languages (Transact-SQL).Query the catalog view sys.fulltext_semantic_languages (Transact-SQL).

SELECT * FROM sys.fulltext_semantic_languages  
GO  

Per l'indicizzazione semantica sono supportate le lingue seguenti.The following languages are supported for semantic indexing. Questo elenco rappresenta l'output della vista del catalogo sys.fulltext_semantic_languages (Transact-SQL), ordinato per LCID.This list represents the output of the catalog view sys.fulltext_semantic_languages (Transact-SQL), ordered by LCID.

LinguaggioLanguage LCIDLCID
TedescoGerman 10311031
Inglese (Stati Uniti)English (US) 10331033
FranceseFrench 10361036
ItalianoItalian 10401040
Portoghese (Brasile)Portuguese (Brazil) 10461046
RussoRussian 10491049
SvedeseSwedish 10531053
Inglese (Regno Unito)English (UK) 20572057
Portoghese (Portogallo)Portuguese (Portugal) 20702070
SpagnoloSpanish 30823082

Determinare quali tipi di documenti è possibile indicizzare Determine which document types can be indexed

Eseguire una query sulla vista del catalogo sys.fulltext_document_types (Transact-SQL).Query the catalog view sys.fulltext_document_types (Transact-SQL).

Se il tipo di documento che si desidera indicizzare non è nell'elenco di tipi supportati, può essere necessario individuare, scaricare e installare filtri aggiuntivi.If the document type that you want to index is not in the list of supported types, then you may have to locate, download, and install additional filters. Per altre informazioni, vedere View or Change Registered Filters and Word Breakers.For more information, see View or Change Registered Filters and Word Breakers.

Best practice: Consider creating a separate filegroup for the full-text and semantic indexes Best practice: Consider creating a separate filegroup for the full-text and semantic indexes

Valutare se creare un filegroup distinto per gli indici full-text e semantici se l'allocazione di spazio su disco costituisce un problema.Consider creating a separate filegroup for the full-text and semantic indexes if disk space allocation is a concern. Gli indici semantici vengono creati nello stesso filegroup dell'indice full-text.The semantic indexes are created in the same filegroup as the full-text index. Un indice semantico completamente popolato può contenere una notevole quantità di dati.A fully populated semantic index may contain large amount of data.

Problema: la ricerca in specifiche colonne non restituisce alcun risultato Issue: Searching on specific column returns no results

È possibile che sia stato specificato un LCID non Unicode per una lingua Unicode.Was a non-Unicode LCID specified for a Unicode language?
È 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.It is possible to enable semantic indexing on a non-Unicode column type with an LCID for a language that only has Unicode words, such as LCID 1049 for Russian. In questo caso, non verrà restituito alcun risultato dagli indici semantici in questa colonna.In this case, no results will ever be returned from the semantic indexes on this column.