Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come utilizzare la ricerca semantica in SQL Server

Questo articolo tratta le basi della ricerca semantica, inclusa una guida completa alla ricerca semantica:iniziare da zero e finire con una funzionalità pronta per l'uso.

Inoltre, i lettori impareranno alcune delle funzionalità di ricerca molto utili ma non generalmente conosciute disponibili in SQL Server come Ricerca semantica, che dimostreremo con alcuni esempi di base.

Questo articolo sottolinea anche l'importanza della ricerca semantica per una specifica forma di analisi che non può essere eseguita con una ricerca ordinaria.

Cos'è la ricerca semantica

Per prima cosa cerchiamo di capire cos'è esattamente la ricerca semantica e in che modo è diversa dalla ricerca full-text.

Definizione Microsoft

Secondo la documentazione Microsoft, Semantic Search fornisce informazioni approfondite sui documenti non strutturati.

Definizione alternativa

La ricerca semantica è una tecnologia o una funzionalità di ricerca speciale utilizzata per eseguire una ricerca completa o un'analisi comparativa principalmente in dati o documenti non strutturati, come documenti MS Word, a condizione che i dati non strutturati siano archiviati all'interno del database di SQL Server.

Compatibilità

La ricerca semantica è compatibile solo con SQL Server 2012 e versioni successive.

Ricorda che la ricerca semantica non è compatibile con il database SQL di Azure o le soluzioni cloud di data warehouse di Azure.

Ciò significa che devi utilizzare una macchina virtuale in Azure o un'istanza di SQL Server locale per utilizzare questa potente funzionalità.

Ricerca semantica vs ricerca full-text

Secondo la documentazione Microsoft, la ricerca full-text consente di interrogare le parole in un documento; la ricerca semantica consente di interrogare il significato del documento.
La ricerca semantica insieme alla ricerca full-text rappresenta una funzionalità congiunta offerta da Microsoft SQL Server e puoi scegliere di installarli durante l'installazione dell'istanza di SQL Server o in un secondo momento, aggiungendo nuove funzionalità all'istanza SQL esistente.

Prerequisiti

Esaminiamo i prerequisiti per l'uso generale della ricerca semantica insieme ad alcune delle cose necessarie per seguire le procedure dettagliate in questo articolo.

Ricerca full-text installata

È obbligatorio sapere come impostare la ricerca full-text poiché la ricerca full-text e la ricerca semantica sono entrambe offerte come funzionalità comuni.

Fare riferimento all'articolo Implementazione della ricerca full-text in SQL Server 2016 per i principianti per configurare la ricerca full-text, che è un prerequisito per l'installazione della ricerca semantica in SQL Server.

Questo articolo prevede che tu abbia installato la ricerca full-text sull'istanza di SQL Server.

dbForge Studio per SQL Server

L'uso della ricerca semantica (nella procedura dettagliata di questo articolo) richiede l'archiviazione di dati non strutturati nel database di SQL Server e in questo articolo è stato utilizzato dbForge Studio per SQL Server anziché salvare direttamente i dati non strutturati in SQL Server.

SQL Server 2016

In questo articolo utilizziamo SQL Server 2016, ma i passaggi dovrebbero essere quasi gli stessi per qualsiasi altra versione compatibile.

Imposta la ricerca semantica

Per utilizzare la ricerca semantica o la ricerca semantica statistica, è possibile installarla durante l'installazione della ricerca full-text o successivamente, aggiungendo la ricerca full-text e la ricerca semantica come nuova funzionalità.

Verifica ricerca full-text

Verificare lo stato di installazione della ricerca full-text e della ricerca semantica eseguendo il seguente script sul database principale:

-- Full-Text Search and Semantic Search status
SELECT SERVERPROPERTY('IsFullTextInstalled') as [Full-Text-Search-and-Semantic-Search-Installed];  
GO

Se l'output è 1, allora sei a posto, ma se è 0, fai riferimento all'articolo sopra menzionato per installare la funzione di ricerca full-text e semantica utilizzando la configurazione di SQL Server.

Installa il database delle statistiche del linguaggio semantico

Installa il database delle statistiche del linguaggio semantico cercando Statistiche del linguaggio semantico di Microsoft® SQL Server® 2016 su Internet o facendo clic sul seguente collegamento.

Selezione del download in base alla tua edizione di Windows:

Installa il database delle lingue:

Fai clic su Avanti per procedere se sei d'accordo con i termini del contratto di licenza:

Lascia le opzioni predefinite così come sono, ma ti consigliamo di controllare il costo del disco come mostrato di seguito:

Sebbene il file occupi solo circa 747 MB ​​di spazio (al momento della stesura di questo articolo), controlla il costo del disco per assicurarti di avere abbastanza spazio disponibile:

Una volta terminato il controllo del costo del disco, fai clic su OK e quindi fare clic su Avanti .

Ti verrà chiesto di installare il file, fai clic su Installa (se interessati a farlo):

Fai clic su Fine una volta completata l'installazione, che dovrebbe apparire come lo screenshot qui sotto:

Individua la cartella in cui è stato installato Semantic Language Database per impostazione predefinita (C:\Programmi\Microsoft Semantic Language Database):

Tutto sembra a posto, quindi copia il file di dati e registro nella cartella dei dati dell'istanza SQL come mostrato di seguito:

Ricorda che il percorso della cartella DATA può variare in base alla versione di SQL Server in uso.

Collega il database del linguaggio semantico all'istanza SQL

Fare clic con il pulsante destro del mouse su Database nodo in Esplora oggetti in SSMS (SQL Server Management Studio) e fai clic su Allega :

Aggiungi Semanticsdb.mdf e fai clic su OK :

Visualizza il database:

Registra il database semantico

Digitare il seguente script sul database principale per registrare il database delle statistiche del linguaggio semantico:

-- Register Semantic Language Statistics Database
EXEC sp_fulltext_semantic_register_language_statistics_db @dbname = N'semanticsdb';  
GO

Controlla lo stato del database semantico

Controllare lo stato del database delle statistiche del linguaggio semantico eseguendo il seguente script sul database principale:

-- Check Semantic Language Statistics Database status
SELECT * FROM sys.fulltext_semantic_language_statistics_database;  
GO

L'output non deve essere vuoto e sarebbe il seguente:

Ricorda che i valori sopra riportati possono differire sulla tua macchina, il che è normale finché vedi una riga, quindi questo significa che il database delle statistiche del linguaggio semantico è stato installato correttamente sulla tua istanza SQL.

Utilizzo della ricerca semantica

Una volta configurata la ricerca semantica, siamo pronti per utilizzarla in SQL Server.

Scenario di ricerca semantica

Archivieremo i documenti dei dipendenti (campioni) in formato rich text nel database di SQL Server per essere ricercati e confrontati in seguito utilizzando la ricerca semantica.

Imposta un database EmployeesSample

Crea un database di esempio con una singola tabella eseguendo lo script T-SQL sul database master come segue:

-- (1) Setup sample database
Create DATABASE EmployeesSample;
GO

USE EmployeesSample

-- (2) Create EmployeesForSemanticSearch table
CREATE TABLE [dbo].[EmployeesForSemanticSearch](
	[EmpID] [int] NOT NULL,
	[DocumentName] [varchar](200) NULL,
	[EmpDocument] [varbinary](max) NULL,
	[EmpDocumentType] [varchar](200) NULL,
 CONSTRAINT [PK_EmployeesForSemanticSearch_EmpID] PRIMARY KEY CLUSTERED 
(
	[EmpID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

Controlla il database di esempio

Esegui il seguente script solo per controllare la tabella del database di esempio:

-- View all the employees
SELECT efss.EmpID
      ,efss.DocumentName
      ,efss.EmpDocument
      ,efss.EmpDocumentType FROM dbo.EmployeesForSemanticSearch efss

L'output è il seguente:

Aggiungi il primo file RTF utilizzando dbForge Studio per SQL Server

Aggiungeremo dati binari alle tabelle, che sono rappresentati da file RTF, utilizzando dbForge Studio per SQL Server .

Apri il database di esempio EmployeesSample in dbForge Studio per SQL Server.

Fare clic con il pulsante destro del mouse su EmployeesForSemanticSearch tabella e fai clic su Recupera dati:

Aggiungi i seguenti dati a EmployeesForSemanticSearch tabella ad eccezione di EmpDocument colonna dopo aver verificato che la tabella non sia in modalità di sola lettura:

EmpID:1

DocumentName:Employee1Document

EmpDocument:(null)

EmpDocumentType:.rtf

Inserisci un documento in formato RTF in EmpDocument colonna aggiungendo il seguente testo nella tabella (facendo clic sui puntini di sospensione e aggiungendo i dati):

This is a research based article and it is a new research which is in process but this is superb in the field of research.

Salva il documento come Employee1Document.rtf in qualsiasi cartella di Windows adatta:

Applica le modifiche per verificare di aver archiviato correttamente un file RTF nella tabella:

Aggiungi il secondo file RTF utilizzando dbForge Studio per SQL Server

Successivamente, aggiungi un altro file RTF a EmployeesForSemanticSearch tabella come sopra utilizzando le seguenti informazioni:

EmpID:2

DocumentName:Employee2Document

EmpDocument:(null)

EmpDocumentType:.rtf

Aggiungi un altro file RTF con il seguente testo:

This is an article which is about facts and figures with little research in it it talks about fact and figures just facts and figures.

Salva il documento nella stessa cartella come segue:

Salva i dati aggiornando la tabella e poi confermando le modifiche appena apportate cliccando sì:

Crea un indice univoco, un indice full-text e un indice semantico utilizzando la procedura guidata

Di nuovo in SSMS (SQL Server Management Studio), fai clic con il pulsante destro del mouse sulla tabella e fai clic su Indice full-text e quindi fare clic su Definisci indice full-text... come mostrato di seguito:

Successivamente, devi selezionare un indice univoco, che di fatto è selezionato per impostazione predefinita, poiché abbiamo creato EmpID colonna chiave primaria precedente come mostrato di seguito, quindi fai clic su Avanti per continuare:

Seleziona EmpDocument da Colonne disponibili , inglese britannico come lingua per Word Breaker , TipoEmpDocument come Tipo colonna e controlla la Ricerca semantica statistica casella nella stessa riga come segue:

Seleziona l'opzione di rilevamento delle modifiche lasciando che siano le impostazioni predefinite a meno che tu non abbia una solida ragione per modificare queste impostazioni:

Crea un nuovo catalogo come EmployeeCatalog :

Fai clic su Avanti ancora:

Infine, dopo qualche altro clic (fai clic su Avanti ), la tabella richiesta è pronta per essere interrogata da Semantic Search:

Verifica se la ricerca semantica è abilitata per una tabella

Verificare se la ricerca semantica rimane intatta per la tabella di interesse eseguendo il seguente script sul database di esempio:

-- Check if Semantic Search is enabled for a database, table, and column
SELECT * FROM sys.fulltext_index_columns WHERE object_id = OBJECT_ID('EmployeesForSemanticSearch')  
GO

L'output dovrebbe indicare che è stato abilitato per la terza colonna durante la configurazione all'inizio della procedura dettagliata:

Esempio 1:utilizzo del punteggio di ricerca semantica per trovare un documento pertinente

Ora possiamo utilizzare la ricerca semantica per confrontare due documenti per trovare una parola chiave di interesse e il relativo punteggio, il che aiuta a indicarci documenti più rilevanti.

Se siamo interessati a visualizzare il documento in cui compare la parola “ricerca ” viene menzionato più spesso rispetto all'altro documento, quindi dobbiamo tenere d'occhio il punteggio di ciascuno dei documenti quando eseguiamo il seguente script T-SQL:

-- Using Semantic Search to find the score for the word research in both documents
SELECT TOP (100) DOC_TBL.EmpID, DOC_TBL.EmpDocumentType,KEYP_TBL.keyphrase,
KEYP_TBL.score
FROM
EmployeesForSemanticSearch AS DOC_TBL  
    INNER JOIN SEMANTICKEYPHRASETABLE  
    (  
    EmployeesForSemanticSearch,  
    EmpDocument
    ) AS KEYP_TBL  
ON DOC_TBL.EmpID = KEYP_TBL.document_key  
WHERE KEYP_TBL.keyphrase = 'research'  
ORDER BY KEYP_TBL.Score DESC;

Il risultato della query precedente è il seguente:

Il documento con il punteggio più alto mostra che ha più rilevanza rispetto all'altro documento per quanto riguarda il nostro punto di interesse (ricerca).

Esempio 2:utilizzo del punteggio di ricerca semantica per trovare un documento pertinente

Possiamo anche trovare il documento in cui la parola "fatto" domina rispetto a qualsiasi altro documento eseguendo lo script seguente:

-- Using Semantic Search to find the score for the word fact in both documents
SELECT TOP (100) DOC_TBL.EmpID, DOC_TBL.EmpDocumentType,KEYP_TBL.keyphrase,
KEYP_TBL.score
FROM
EmployeesForSemanticSearch AS DOC_TBL  
    INNER JOIN SEMANTICKEYPHRASETABLE  
    (  
    EmployeesForSemanticSearch,  
    EmpDocument
    ) AS KEYP_TBL  
ON DOC_TBL.EmpID = KEYP_TBL.document_key  
WHERE KEYP_TBL.keyphrase = 'fact'  
ORDER BY KEYP_TBL.Score DESC;

I risultati sono i seguenti:

I risultati precedenti portano alla conclusione che il secondo documento archiviato è l'unico documento in cui la parola fatto è menzionato, ma se desideri controllare questi risultati, apri i documenti archiviati per visualizzarli.

Congratulazioni! Hai imparato con successo non solo a configurare la ricerca semantica in SQL Server, ma hai anche acquisito esperienza pratica nell'utilizzo della ricerca semantica.

Cose da fare

Ora che puoi impostare e scrivere alcune query di ricerca semantica di base, prova quanto segue per migliorare ulteriormente le tue abilità:

  1. Prova ad aggiungere un altro documento che parli di ricerca e quindi esegui lo script nel primo esempio per vedere quale documento è il documento più rilevante confrontando i loro punteggi.
  2. Tenendo presente questo articolo, aggiungi un altro documento con la parola fatto viene menzionato un paio di volte, quindi esegui il T-SQL nell'esempio 2 di questo articolo per vedere se i risultati rimangono gli stessi o cambiano.
  3. Prova a utilizzare la ricerca semantica aggiungendo più documenti e più testo sia ai documenti esistenti che a quelli nuovi e quindi trova i documenti che corrispondono alle tue parole di interesse.
  4. Esplora gli esempi più avanti per scoprire da solo se la ricerca semantica fa distinzione tra maiuscole e minuscole o senza distinzione tra maiuscole e minuscole (Suggerimento:puoi modificare leggermente gli esempi).