sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man använder semantisk sökning i SQL Server

Den här artikeln behandlar grunderna i semantisk sökning, inklusive en komplett genomgång av semantisk sökning:börja från början och avsluta med en funktion som är färdig att använda.

Dessutom kommer läsarna att lära sig om några av de mycket användbara men inte allmänt kända sökfunktionerna som finns tillgängliga i SQL Server som Semantic Search, som vi kommer att visa med några grundläggande exempel.

Den här artikeln understryker också vikten av semantisk sökning för en specifik form av analys som inte kan utföras med en vanlig sökning.

Vad är semantisk sökning

Låt oss först ta reda på vad exakt semantisk sökning är och hur den skiljer sig från fulltextsökning.

Microsoft Definition

Enligt Microsofts dokumentation ger Semantic Search djup insikt i ostrukturerade dokument.

Alternativ definition

Semantisk sökning är en speciell sökteknik eller funktion som används för att utföra en omfattande sökning eller en jämförande analys huvudsakligen i ostrukturerade data eller dokument, såsom MS Word-dokument, förutsatt att den ostrukturerade informationen lagras i SQL Server-databasen.

Kompatibilitet

Semantisk sökning är endast kompatibel med SQL Server 2012 och senare versioner.

Kom ihåg Semantisk sökning är inte kompatibel med Azure SQL-databas eller Azure data warehouse molnlösningar.

Det betyder att du antingen måste arbeta med en virtuell dator på Azure eller på en lokal SQL Server-instans för att använda denna kraftfulla funktion.

Semantisk sökning vs fulltextsökning

Enligt Microsofts dokumentation låter fulltextsökning dig fråga efter orden i ett dokument; Semantisk sökning låter dig fråga innebörden av dokumentet.
Semantisk sökning tillsammans med fulltextsökning representerar en gemensam funktion som erbjuds av Microsoft SQL Server, och du kan antingen välja att installera dem under installationen av din SQL Server-instans eller senare, genom att lägga till nya funktioner i din befintliga SQL-instans.

Förutsättningar

Låt oss gå igenom förutsättningarna för allmän användning av semantisk sökning tillsammans med några av de saker som krävs för att följa genomgångarna i den här artikeln.

Fulltextsökning installerad

Det är obligatoriskt att veta hur man ställer in Full-Text Search eftersom Full-Text Search och Semantic Search båda erbjuds som en gemensam funktion.

Se artikeln Implementing Full-Text Search i SQL Server 2016 för nybörjare för att ställa in Full-Text Search, vilket är en förutsättning för att installera Semantic Search i SQL Server.

Den här artikeln förväntar sig att du har installerat Full-Text Search på din SQL Server-instans.

dbForge Studio för SQL Server

Användningen av semantisk sökning (i genomgången av den här artikeln) kräver att ostrukturerad data lagras i SQL Server-databasen, och i den här artikeln gjorde vi detta med dbForge Studio för SQL Server istället för att spara direkt ostrukturerad data i SQL Server.

SQL Server 2016

Vi använder SQL Server 2016 i den här artikeln, men stegen bör nästan vara desamma för alla andra kompatibla versioner.

Konfigurera semantisk sökning

För att använda semantisk sökning eller statistisk semantisk sökning kan du installera den under installationen av Full-Text Search eller efteråt, genom att lägga till Full-Text Search &Semantic Search som en ny funktion.

Fulltextsökningskontroll

Kontrollera installationsstatusen för fulltextsökning och semantisk sökning genom att köra följande skript mot huvuddatabasen:

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

Om utgången är 1 är du bra att gå, men om den är 0, se artikeln som nämns ovan för att installera Full-Text Search och Semantic Search-funktionen med hjälp av SQL Server-inställningen.

Installera Semantic Language Statistics Database

Installera Semantic Language Statistics Database genom att antingen söka Microsoft® SQL Server® 2016 Semantic Language Statistics på internet eller klicka på följande länk.

Välja nedladdning baserat på din Windows-utgåva:

Installera språkdatabasen:

Klicka på Nästa för att fortsätta om du är bra med villkoren i licensavtalet:

Lämna standardalternativen som de är, men det rekommenderas att kontrollera diskkostnaden enligt nedan:

Även om filen bara tar cirka 747 MB ​​utrymme (när den här artikeln skrivs), kontrollera diskkostnaden för att säkerställa att du har tillräckligt med utrymme tillgängligt:

När du är klar med diskkostnadskontrollen klickar du på OK och klicka sedan på Nästa .

Du kommer att bli ombedd att installera filen. Klicka på Installera (om du är intresserad av att göra det):

Klicka på Slutför när installationen är klar, vilket bör se ut som skärmdumpen nedan:

Leta reda på mappen där Semantic Language Database installerades som standard (C:\Program Files\Microsoft Semantic Language Database):

Allt ser bra ut, så kopiera data- och loggfilen till din SQL-instansdatamapp som visas nedan:

Kom ihåg att sökvägen till DATA-mappen kan variera beroende på din SQL Server-version.

Bifoga Semantic Language Database till SQL Instance

Högerklicka på Databaser nod under Object Explorer i SSMS (SQL Server Management Studio) och klicka på Bifoga :

Lägg till Semanticsdb.mdf och klicka på OK :

Se databasen:

Registrera semantisk databas

Skriv följande skript mot huvuddatabasen för att registrera Semantic Language Statistics Database:

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

Kontrollera statusen för semantisk databas

Kontrollera statusen för Semantic Language Statistics Database genom att köra följande skript mot huvuddatabasen:

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

Utdata får inte vara tom och skulle vara som följer:

Kom ihåg att värdena ovan kan skilja sig åt på din dator, vilket är normalt så länge du ser en rad, vilket betyder att databas för semantisk språkstatistik har installerats på din SQL-instans.

Använda semantisk sökning

När Semantisk sökning är klar är vi redo att använda den i SQL Server.

Semantisk sökscenario

Vi kommer att lagra anställdas dokument (prover) i rich text-format i SQL Server-databasen för att söka och jämföras senare med Semantic Search.

Skapa en EmployeesSample Database

Skapa en exempeldatabas med en enda tabell genom att köra T-SQL-skriptet mot huvuddatabasen enligt följande:

-- (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

Kontrollera exempeldatabasen

Kör följande skript bara för att kontrollera exempeldatabastabellen:

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

Utgången är som följer:

Lägg till den första Rich Text-filen med dbForge Studio för SQL Server

Vi kommer att lägga till binär data till tabellerna, som representeras av rich text-filer, med dbForge Studio for SQL Server .

Öppna exempeldatabasen EmployeesSample i dbForge Studio för SQL Server.

Högerklicka på EmployeesForSemanticSearch tabell och klicka på Hämta data:

Lägg till följande data i EmployeesForSemanticSearch tabellen förutom EmpDocument kolumn efter att ha säkerställt att tabellen inte är i skrivskyddat läge:

EmpID:1

Dokumentnamn:Employee1Document

EmpDocument:(null)

EmpDocumentType:.rtf

Infoga ett dokument med rikt textformat i EmpDocument kolumn genom att lägga till följande text i tabellen (klicka på ellipser och lägga till data):

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.

Spara dokumentet som Employee1Document.rtf i valfri lämplig Windows-mapp:

Vänligen tillämpa ändringarna för att se att du har lyckats lagra en RTF-fil i tabellen:

Lägg till den andra Rich Text-filen med dbForge Studio för SQL Server

Lägg sedan till ytterligare en RTF-fil i EmployeesForSemanticSearch tabell på samma sätt som ovan med hjälp av följande information:

EmpID:2

DocumentName:Employee2Document

EmpDocument:(null)

EmpDocumentType:.rtf

Lägg till ytterligare en Rich Text-fil med följande text:

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.

Spara dokumentet i samma mapp enligt följande:

Spara data genom att uppdatera tabellen och sedan bekräfta ändringarna du just har gjort genom att klicka på Ja:

Skapa ett unikt index, fulltextindex och semantiskt index med hjälp av Wizard

Tillbaka i SSMS (SQL Server Management Studio), högerklicka på tabellen och klicka på Fulltextindex och klicka sedan påDefiniera fulltextindex... som visas nedan:

Därefter måste du välja ett unikt index, som faktiskt är valt som standard, eftersom vi skapade EmpID primärnyckelkolumn tidigare som visas nedan, klicka därför på Nästa för att fortsätta:

Välj EmpDocument från Tillgängliga kolumner , brittisk engelska som Språk för Word Breaker , EmpDocumentType som Typ kolumn och kontrollera Statistisk semantisk sökning ruta i samma rad enligt följande:

Välj alternativet för ändringsspårning genom att låta det vara standardinställningar om du inte har en solid anledning att ändra dessa inställningar:

Skapa en ny katalog som EmployeeCatalog :

Klicka på Nästa igen:

Slutligen, efter ytterligare några klick (klicka på Nästa ), är den önskade tabellen redo att frågas av Semantic Search:

Kontrollera om semantisk sökning är aktiverat för en tabell

Kontrollera om semantisk sökning förblir intakt för intressetabellen genom att köra följande skript mot exempeldatabasen:

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

Utdata bör indikera att den har aktiverats för den tredje kolumnen som vi ställde in den i början av genomgången:

Exempel 1:Använda Semantic Search Score för att hitta ett relevant dokument

Vi kan nu använda semantisk sökning för att jämföra två dokument för att hitta ett nyckelord av intresse och dess relativa poäng, vilket hjälper oss att peka på mer relevanta dokument.

Om vi ​​är intresserade av att se dokumentet där ordet "forskning ” nämns oftare jämfört med det andra dokumentet, då måste vi hålla ett öga på poängen för vart och ett av dokumenten när vi kör följande T-SQL-skript:

-- 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;

Resultatet av frågan ovan är följande:

Dokumentet med högst poäng visar att det har mer relevans jämfört med det andra dokumentet när det gäller vår intressepunkt (forskning).

Exempel 2:Använda Semantic Search Score för att hitta ett relevant dokument

Vi kan också hitta dokumentet där ordet "fakta" dominerar jämfört med andra dokument genom att köra skriptet nedan:

-- 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;

Resultaten är följande:

Resultaten ovan leder till slutsatsen att det andra lagrade dokumentet är det enda dokument där ordet fakta nämns, men om du vill kontrollera dessa resultat, öppna de lagrade dokumenten för att se dem.

Grattis! Du har framgångsrikt lärt dig att inte bara ställa in Semantic Search i SQL Server utan också fått lite praktisk erfarenhet av att använda Semantic Search.

Saker att göra

Nu när du kan ställa in och skriva några grundläggande semantiska sökfrågor, försök med följande för att ytterligare förbättra dina färdigheter:

  1. Försök att lägga till ett annat dokument som berättar om forskning och kör sedan skriptet i det första exemplet för att se vilket dokument som är det mest relevanta dokumentet genom att jämföra deras poäng.
  2. Med tanke på den här artikeln lägger du till ett annat dokument där ordet fakta nämns ett par gånger och kör sedan T-SQL i exempel 2 i denna artikel för att se om resultaten förblir desamma eller ändras.
  3. Testa att använda semantisk sökning genom att lägga till fler dokument och mer text i både befintliga och nya dokument och sedan hitta de dokument som matchar dina intresseord.
  4. Utforska exemplen längre fram för att ta reda på på egen hand om Semantisk sökning är skiftlägeskänslig eller skiftlägesokänslig (Tips:Du kan ändra exemplen något).

  1. Oracle infoga om det inte finns uttalande

  2. Skapa en Schema Bound View i SQL Server

  3. Postgres släpptabell syntaxfel

  4. onbeforeprint() och onafterprint() motsvarande för icke IE-webbläsare