Abilitare la ricerca semantica in tabelle e colonne

Descrive 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 vengono creati indici aggiuntivi. 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 argomento.

Contenuto dell'argomento

Per

  • Creare un indice semantico

    • Requisiti e restrizioni per la creazione di un indice semantico

    • Procedura: creare un indice semantico quando non esiste alcun indice full-text

    • Procedura: creare un indice semantico quando esiste un indice full-text

    • Requisiti e restrizioni per la modifica di un indice esistente

  • Eliminare un indice semantico

    • Procedura: eliminare un indice semantico

    • Requisiti e restrizioni per l'eliminazione di un indice semantico

  • Verificare se la ricerca semantica su oggetti di database è abilitata

    • Procedura: verificare se la ricerca semantica su oggetti di database è abilitata
  • Determinare ciò che può essere indicizzato per la ricerca semantica

    • Procedura: verificare quali lingue sono supportate per la ricerca semantica

    • Procedura: determinare quali tipi di documenti è possibile indicizzare

Ulteriori informazioni

  • Procedura consigliata: considerare la creazione di un filegroup distinto per gli indici full-text e semantici

  • Problema: la ricerca in colonne specifiche non restituisce alcun risultato

Creazione di 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 ulteriori informazioni, vedere Creazione e gestione di indici full-text.

  • È possibile specificare qualsiasi tipo di documento supportato per l'indicizzazione full-text per colonne varbinary(max). Per ulteriori informazioni, vedere Procedura: determinare quali tipi di documenti è possibile indicizzare in questo argomento.

  • 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 ulteriori informazioni, vedere Trovare frasi chiave nei documenti mediante ricerca semantica e Trovare documenti simili e correlati tramite la ricerca semantica.

  • 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.

  • 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.

[INIZIO PAGINA]

Procedura: creare un indice semantico quando non esiste alcun indice full-text

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. È 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
    Chiamare l'istruzione CREATE FULLTEXT INDEX e specificare STATISTICAL_SEMANTICS per ogni colonna in cui si desidera creare un indice semantico. Per ulteriori informazioni su tutte le opzioni per questa istruzione, vedere CREATE FULLTEXT INDEX (Transact-SQL).

    Esempio 1: creazione di un indice univoco, di un indice full-text e di un indice semantico

    Nell'esempio riportato di seguito viene creato il catalogo full-text predefinito ft. Nell'esempio viene quindi creato un indice univoco nella colonna JobCandidateID della tabella HumanResources.JobCandidate del database di esempio AdventureWorks2012. Questo indice univoco è necessario come colonna chiave di un indice full-text. Nell'esempio vengono infine creati 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 AdventureWorks2012. Nell'esempio viene quindi creato un indice full-text che utilizza questo nuovo catalogo. L'indice full-text viene creato per le colonne Titolo, DocumentSummary e Documento della tabella Production.Document, mentre l'indice semantico viene creato solo per la colonna Documento. 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 Integer, 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 seguito, durante le ore di minore attività, nell'esempio viene utilizzata un'istruzione ALTER FULLTEXT INDEX per avviare un popolamento completo nel nuovo indice e abilitare il rilevamento automatico delle modifiche.

    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 Seleziona colonne tabella per ogni colonna in cui si desidera creare un indice semantico. Per ulteriori informazioni, incluse informazioni sulla modalità di avvio dell'Indicizzazione guidata full-text, vedere Utilizzare l'Indicizzazione guidata full-text.

[INIZIO PAGINA]

Procedura: 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
    Chiamare l'istruzione ALTER FULLTEXT INDEX con le opzioni descritte di seguito per ogni colonna in cui si desidera aggiungere un indice semantico. Per ulteriori informazioni su tutte le opzioni per questa istruzione, vedere ALTER FULLTEXT INDEX (Transact-SQL).

    Se non diversamente specificato, dopo una chiamata a ALTER vengono ripopolati sia gli indici full-text sia gli indici semantici.

    • Per aggiungere indicizzazione full-text solo a una colonna, utilizzare la sintassi ADD.

    • Per aggiungere indicizzazione sia full-text sia semantica a una colonna, utilizzare la sintassi ADD con l'opzione STATISTICAL_SEMANTICS.

    • Per aggiungere indicizzazione semantica a una colonna già abilitata per l'indicizzazione full-text, utilizzare l'opzione ADD STATISTICAL_SEMANTICS. È possibile aggiungere l'indicizzazione semantica solo a una colonna in una singola istruzione ALTER.

    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 AdventureWorks2012. 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 ulteriori informazioni, vedere Gestione di indici full-text..

[INIZIO PAGINA]

Requisiti e restrizioni per la modifica di un indice esistente

  • Non è possibile modificare un indice esistente mentre è in corso il popolamento dell'indice. Per ulteriori 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.

[INIZIO PAGINA]

Eliminazione di un indice semantico

Procedura: eliminare un indice semantico

È possibile eliminare un'indicizzazione semantica quando si modifica un indice full-text esistente tramite l'istruzione ALTER FULLTEXT INDEX. È possibile eliminare inoltre l'indicizzazione semantica tramite 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 più colonne, richiamare 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, richiamare l'istruzione ALTER FULLTEXT INDEX con l'opzione ALTER COLUMN column_name DROP STATISTICAL_SEMANTICS.

      USE database_name
      GO
      
      ALTER FULLTEXT INDEX
          ALTER COLUMN column_name
          DROP
      GO
      
  • Eliminare 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 ulteriori informazioni, vedere Gestione di indici full-text..

[INIZIO PAGINA]

Requisiti e restrizioni per l'eliminazione di un indice semantico

  • Non è possibile eliminare indicizzazione 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.

[INIZIO PAGINA]

Verifica dell'abilitazione della ricerca semantica su oggetti di database

Procedura: verificare se la ricerca semantica su oggetti di database è abilitata

  • Verifica dell'abilitazione della ricerca semantica per un database
    Eseguire una query sulla proprietà IsFullTextEnabled della funzione per i metadati DATABASEPROPERTYEX (Transact-SQL).

    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.

    SELECT DATABASEPROPERTYEX('database_name', 'IsFullTextEnabled')
    GO
    
  • Verifica dell'abilitazione della ricerca semantica per una tabella
    Eseguire una query sulla proprietà TableFullTextSemanticExtraction della funzione per i metadati OBJECTPROPERTYEX (Transact-SQL).

    Se viene restituito il valore 1, la ricerca semantica è abilitata per la tabella. Se viene restituito il valore 0, 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:

    • Eseguire una query sulla proprietà StatisticalSemantics della funzione per i metadati COLUMNPROPERTY (Transact-SQL).

      Se viene restituito il valore 1, la ricerca semantica è abilitata per la colonna. Se viene restituito il valore 0, la ricerca non è abilitata.

      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.

      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 fare clic con il pulsante destro del mouse su una colonna e scegliere 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.

[INIZIO PAGINA]

Determinare ciò che può essere indicizzato per la ricerca semantica

Procedura: verificare quali lingue sono supportate per la ricerca semantica

Nota importanteImportante

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.

Eseguire 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. In questo elenco è rappresentato l'output della vista del catalogo sys.fulltext_semantic_languages (Transact-SQL), ordinato per LCID.

Linguaggio

LCID

Tedesco

1031

Inglese (Stati Uniti)

1033

Francese

1036

Italiano

1040

Portoghese (Brasile)

1046

Russo

1049

Svedese

1053

Inglese (Regno Unito)

2057

Portoghese (Portogallo)

2070

Spagnolo

3082

[INIZIO PAGINA]

Procedura: determinare quali tipi di documenti è possibile indicizzare

Eseguire una query sulla vista del catalogo 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. Per ulteriori informazioni, vedere Visualizzazione o modifica di word breaker e filtri registrati.

[INIZIO PAGINA]

Procedura consigliata: considerare la creazione di un filegroup distinto 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.

[TORNA ALL'INIZIO]

Problema: la ricerca in specifiche colonne non restituisce alcun risultato

  • È 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 verrà restituito alcun risultato dagli indici semantici in questa colonna.

[INIZIO PAGINA]