sql >> Databáze >  >> RDS >> Sqlserver

Ukládání a analýza dokumentů v systému souborů Windows pomocí sémantického vyhledávání SQL Server – část 2

Toto je druhá část materiálu věnovaného sémantickému vyhledávání SQL Serveru . V předchozím článku jsme prozkoumali základy. Nyní se zaměříme na porovnání dokumentů uložených v systému souborů Windows a srovnávací analýzu se sémantickým vyhledáváním na serveru SQL Server.

Provádění srovnávací analýzy dokumentů založených na názvu

Provedeme srovnávací analýzu dokumentů na základě jejich standardního pojmenování. V tomto okamžiku proveďte rychlou kontrolu dotazem na EmployeesFilestreamSample databáze, kterou jsme nastavili dříve:

-- Zobrazte uložené dokumenty spravované tabulkou souborů pro kontrolu SELECT stream_id ,[name] ,file_type,creation_timeFROM EmployeesFilestreamSample.dbo.EmployeesDocumentStore 

Výsledky nám musí ukázat uložené dokumenty:

Kontrolní seznam sémantického vyhledávání

Již máme databázi a dva vzorové dokumenty MS Word v systému souborů s použitím tabulky souborů (můžete se podívat na část 1, kde si v případě potřeby obnovíte znalosti). To však není automaticky kvalifikují naše dokumenty pro scénář sémantického vyhledávání.

Sémantické vyhledávání lze povolit jedním z následujících způsobů:

  1. Pokud jste již nastavili Fulltext Search , můžete povolit sémantické vyhledávání v jediném kroku.
  2. Sémantické vyhledávání můžete nastavit přímo, ale předtím musíte nastavit také Fulltextové vyhledávání.

Test fulltextového vyhledávání před nastavením sémantického vyhledávání

Pokud funguje fulltextový dotaz, stačí povolit sémantické vyhledávání. Chcete-li to zkontrolovat, spusťte fulltextový dotaz na požadovanou tabulku:

-- Hledání slova Zaměstnanec pomocí fulltextového vyhledávání proti EmployeesDocumentStore File TableSELECT [name] FROM [EmployeesFilestreamSample].[dbo].[EmployeesDocumentStore] WHERE CONTAINS(name,'Employee') 

Výstup:

Nejprve tedy musíme splnit požadavky na fulltextové vyhledávání a poté povolit sémantické vyhledávání.

Povolení sémantického vyhledávání pro použití

Pro použití sémantického vyhledávání jsou nutné alespoň dva z následujících bodů:

  • Jedinečný index
  • Plnotextový katalog
  • Plnotextový index

Chcete-li vytvořit jedinečný index, spusťte následující skript T-SQL:

-- Vytvořte jedinečný index požadovaný pro sémantické vyhledáváníVYTVOŘTE UNIKÁTNÍ INDEX UQ_Stream_Id ON EmployeesDocumentStore(stream_id) GO 

Vytvořte fulltextový katalog založený na nově vytvořeném jedinečném indexu. A poté vytvořte fulltextový index, jak je znázorněno níže:

- Připravení sémantického vyhledávání k použití se souborem Tablecreate Fulltext katalog zaměstnanců FiletableCatalog s Accent_Sensitivity =On; Vytvoření indexu FullText na zaměstnanci (Jméno jazyk 1033 Statistical_SeMantics 1033 Statistics Languages ​​10333333333333333333333333333333333333333333333333333333333333333333333333333. KLÍČOVÝ INDEX UQ_Stream_IdON EmployeesFileTableCatalog S AUTOMATICKÉ SLEDOVÁNÍ ZMĚNY, STOPLIST=SYSTEM;

Výsledky:

Test fulltextového vyhledávání po nastavení sémantického vyhledávání

Spusťte stejný fulltextový dotaz a vyhledejte slovo Zaměstnanec v uložených dokumentech:

-- Hledání (po nastavení sémantického vyhledávání) slova Zaměstnanec pomocí Fulltextového vyhledávání proti EmployeesDocumentStore File TableSELECT [jméno] FROM [EmployeesFilestreamSample].[dbo].[EmployeesDocumentStore] WHERE CONTAINS(name,'Employee')  

Výstup:

Je v pořádku, že fulltextové dotazy pracují s tabulkou souborů, zatímco ji připravujeme na sémantické vyhledávání.

Přidat další dokumenty MS Word

Jdeme do EmployeesDocumentStore Tabulka souborů a klikněte na Prozkoumat adresář FileTable :

Vytvořte a uložte nový dokument s názvem Sadaf Contract Employee :

Dále do nově vytvořeného dokumentu přidejte následující text. První řádek musí být název dokumentu!

Sadaf smluvní zaměstnanec (titul)

Sadaf je velmi efektivní obchodní analytik, který pracuje na základě kontaktů. Je plně schopna zvládnout obchodní požadavky a převést je do technických specifikací, na kterých mohou vývojáři pracovat. Je to velmi zkušená obchodní analytička.

Přidejte další dokument s názvem Mike Permanent Employee :

Aktualizujte dokument následujícím textem:

Mike stálý zaměstnanec (název dokumentu)

Mike je čerstvý programátor, jehož odborné znalosti zahrnují vývoj webových aplikací. Rychle se učí a rád pracuje na jakémkoli projektu. Má silné dovednosti při řešení problémů, ale má méně obchodních znalostí. Potřebuje pomoc od jiných vývojářů nebo obchodních analytiků, aby pochopil problém a splnil požadavky.

Je dobrý, když pracuje na malých projektech, ale má problémy, když dostane velký nebo složitý projekt.

Máme čtyři dokumenty uložené v systému souborů Windows spravovaném pomocí File Table. Tyto dokumenty by měly být využívány sémantickým vyhledáváním (včetně fulltextového vyhledávání).

Důležité:Přestože jsme do složky právě uložili čtyři dokumenty MS Word jako ukázku, dokážete si představit důležitost použití sémantického vyhledávání, když stovky takových dokumentů jsou spravovány databází SQL Server a je třeba tyto dokumenty dotazovat. najít cenné informace.

Pro úspěšnou implementaci tohoto přístupu je velmi důležité standardní pojmenování dokumentů.

Jednoduché počítání dokumentů

Tyto dokumenty můžeme porovnat a definovat rozdíly a podobnosti na základě jejich standardního pojmenování pomocí sémantického vyhledávání. Jednoduchý dotaz nám například může sdělit celkový počet dokumentů uložených ve složce Windows:

-- Získávání celkového počtu uložených dokumentůSELECT COUNT(*) AS Total_Documents FROM EmployeesDocumentStore 

Porovnání stálých zaměstnanců a zaměstnanců na základě smlouvy

Tentokrát používáme sémantické vyhledávání k porovnání počtu stálých a smluvních zaměstnanců v naší organizaci:

-- Vytvoření proměnné souhrnné tabulkyDECLARE @Documents TABLE(DocumentType VARCHAR(100),DocumentsCount INT)INSERT INTO @Documents --Uložení celkového počtu uložených dokumentů do souhrnné tabulkySELECT 'Total Documents',COUNT(*) AS Total_Documents FROM EmployeesDocumentStoreINSERT INTO @Documents -- Uložení celkového počtu dokumentů stálých zaměstnanců uložených do souhrnné tabulkySELECT 'Total Permanent Employees',COUNT(*) FROM sémantický klíčphrasetable (EmployeesDocumentStore, *)WHERE keyphrase ='Permanent INTODocuments' INSERT celkový počet uložených dokumentů stálých zaměstnancůSELECT 'Total Contract Employees',COUNT(*) FROM sémantický klíčphrasetable (EmployeesDocumentStore, *)WHERE keyphrase ='Contract'SELECT DocumentType,DocumentsCount FROM @Documents 

Výstup:

Spusťte jednoduchý (na základě názvu dokumentu) dotaz sémantického vyhledávání, abyste zobrazili klíčovou frázi a jeho relativní skóre pro každý dokument:

-- Získání klíčové fráze a relativního skóre pro všechny dokumenty VYBERTE * Z sémantických klíčových frází (EmployeesDocumentStore, NAME) ORDER BY skóre 

Výstup:

Pojďme přidat další podrobnosti k názvům dokumentů. Přejmenujeme je následovně:

  • Asif stálý zaměstnanec – zkušený projektový manažer
  • Mike stálý zaměstnanec – čerstvý programátor
  • Petr stálý zaměstnanec – čerstvý projektový manažer
  • Sadaf smluvní zaměstnanec – zkušený obchodní analytik

Hledání nových zaměstnanců (dokumenty)

Najděte dokumenty týkající se nových zaměstnanců podle jejich titulů (standardní pojmenování):

-- Získání hodnocení založeného na názvu dokumentu pro nalezení nových zaměstnanců pro nový projekt SELECT (SELECT jméno z EmployeesDocumentStore kde cesta_lokátor=document_key) jako DocumentName,keyphrase,score FROM sémantickeyphrasetable(EmployeesDocumentStore, NAME) kde keyphrase='fresh 'objednat podle DocumentName desc 

Výsledky:

Hledání zkušených zaměstnanců (dokumenty)

Předpokládejme, že chceme rychle zkontrolovat všechny podrobnosti o zkušených zaměstnancích pro složitý projekt, který nás čeká. Použijte následující dotaz sémantického vyhledávání:

-- Získání hodnocení založeného na názvu dokumentu pro nalezení všech zkušených zaměstnanců SELECT (SELECT jméno z EmployeesDocumentStore kde cesta_lokátor=klíč_dokumentu) jako DocumentName ,keyphrase,score FROM sémantickeyphrasetable(EmployeesDocumentStore, NAME) kde keyphrase='experienced' Název_dokumentu 

Výstup:

Vyhledání všech projektových manažerů (dokumentů)

Nakonec, pokud chceme rychle projít dokumenty pro všechny projektové manažery, potřebujeme následující dotaz sémantického vyhledávání:

-- Získání hodnocení založeného na názvu dokumentu pro nalezení všech projektových manažerů SELECT (SELECT jméno z EmployeesDocumentStore kde cesta_lokátor=document_key) jako DocumentName ,keyphrase,score FROM sémantickeyphrasetable(EmployeesDocumentStore, NAME) kde keyphrase='Project' 

Výsledky:

Po implementaci návodu můžete úspěšně ukládat nestrukturovaná data, jako jsou dokumenty MS Word, do složky Windows pomocí tabulky souborů.

Přezkoumání analýzy založené na názvu

Doposud jsme se naučili, jak provádět analýzu dokumentů uložených v tabulce souborů na základě názvu pomocí sémantického vyhledávání. Potřebujeme však splnit následující podmínky:

  • Standardní pojmenování by mělo být na místě.
  • Názvy by měly poskytovat informace potřebné pro analýzu.

Tyto podmínky jsou také omezením analýzy založené na názvech. To však neznamená, že s tím nemůžeme mnoho udělat.

Naším zaměřením zůstává přístup sémantického vyhledávání založený na názvech/sloupcích.

Zobrazit sloupce názvů dokumentů

Podívejme se na některé z hlavních sloupců tabulky Dokumenty včetně Název sloupec:

USE EmployeesFilestreamSample-- Zobrazení sloupce názvu s typy souborů uložených dokumentů v tabulce souborů pro analýzuSELECT name,file_type FROM dbo.EmployeesDocumentStore 

Výstup:

Porozumění funkci SEMANTICKEYPHRASETABLE

SQL Server nabízí SEMANTICKEYPHRASETABLE funkce pro analýzu dokumentu pomocí sémantického vyhledávání. Syntaxe je následující:

SEMANTICKEYPHRASETABLE ( tabulka, { sloupec | (seznam_sloupců) | * } [ , zdrojový_klíč ] ) 

Tato funkce nám poskytuje klíčové fráze spojené s dokumentem. Můžeme je použít k analýze dokumentů na základě jejich názvů nebo obsahu. V našem případě musíme tuto funkci nejen používat, ale také pochopit, jak ji správně používat.

Funkce vyžaduje následující data:

  • Název tabulky souborů, která se má použít pro analýzu sémantického vyhledávání.
  • Název sloupce, který se má použít pro analýzu sémantického vyhledávání.

Potom vrátí následující data:

  • Column_id – číslo sloupce
  • Document_Key – výchozí primární klíč pro dokument Tabulka souborů
  • Klíčová fráze – je fráze, kterou se Semantic Search rozhodne indexovat pro analýzu. Vztahuje se na název i obsah dokumentu v závislosti na tom, pro který sloupec chceme vidět klíčové fráze
  • Skóre – určuje sílu klíčové fráze spojené s dokumentem, například jak lze dokument nejlépe rozpoznat podle klíčové fráze. Skóre může být mezi 0,0 až 1,0.

Analýza všech dokumentů pomocí funkce SEMANTICKEYPHRASETABLE

Používáme SEMANTICKEYPRASETABLE funkce pro analýzu na základě jmen dokumentů uložených ve složce Windows spravované tabulkou souborů.

Spusťte následující skript T-SQL:

POUŽÍVEJTE EmployeesFilestreamSample-- Zobrazení klíčových frází a jejich skóre pro sloupec názvůSELECT * Z SEMANTICKEYPHRASETABLE(EmployeesDocumentStore,name)seřadit podle skóre desc 

Výstup:

Ke všem dokumentům máme připojený seznam všech klíčových frází a jejich skóre. id_sloupce 3 v horním řádku je název sloupec. Navíc jsme funkci také zavolali zadáním tohoto sloupce (název):

Můžete najít document_key : 0xFD89E1811D4F3B2FEB1012DF0C8016F9ACEB2F3260 se spuštěným následujícím skriptem (ačkoli je jasné, že tento dokument je ten, kde název obsahuje klíčovou frázi sadaf ):

USE EmployeesFilestreamSample-- Hledání názvu dokumentu podle jeho klíče (path_locator)SELECT name,path_locator FROM dbo.EmployeesDocumentStoreWHERE path_locator=0xFD89E1811D4F3B2FEB1012DF0C8016F260B2> 

Výstup:

Klíčová fráze sadafnejlepší skóre :1,0 .

V případě standardního pojmenování dokumentu s dostatečnými informacemi pro analýzu sémantického vyhledávání je tedy naše klíčová fráze sadaf je nejlepší shoda pro tento konkrétní název dokumentu.

Analýza konkrétního dokumentu pomocí funkce SEMANTICKEYPHRASETABLE

Analýzu sémantického vyhledávání můžeme zúžit na základě názvu sloupec. Potřebujeme například zobrazit pouze sloupec názvu- na základě klíčových frází konkrétního dokumentu. Klíč dokumentu můžeme specifikovat v SEMANTICKEYPRASETABLE Funkce.

Nejprve identifikujeme klíč dokumentu pro tento dokument, kde chceme vidět všechny klíčové fráze. Spusťte následující skript T-SQL:

-- Najděte klíč_dokumentu dokumentu, kde název obsahuje jméno PeterSELECT, název_cesty jako klíč_dokumentu Z EmployeesDocumentStoreWHERE název jako '%Peter%' 

Klíč dokumentu je 0xFF6A92952500812FF013376870181CFA6D7C070220

Nyní se podívejme na tento dokument týkající se všech klíčových frází, které mohou definovat název dokumentu:

-- Zobrazte všechny klíčové fráze a jejich skóre pro dokument související s Petrem stálým zaměstnancemSELECT id_sloupce,jméno,klíčová fráze,skóre ZE SEMANTICKEYPHRASETABLE(ZaměstnanciDokumentStore,jméno,0xFF6A92952500812FF0133768707C2ator=doceore00 popis skóre 

Výsledky:

Klíčová fráze zaměstnanec získá nejvyšší skóre v tomto dokumentu. Vidíme, že všechna slova ve sloupci jsou klíčovými frázemi, které určují význam dokumentu.

Porozumění funkci SEMANTICSIMILARITYTABLE

Tato funkce nám pomáhá porovnat jeden dokument se všemi ostatními dokumenty na základě klíčových frází. Syntaxe této funkce je následující:

SEMANTICSIMILARITYTABLE ( tabulka, { sloupec | (seznam_sloupců) | * }, zdrojový_klíč ) 

Vyžaduje, aby název tabulky, sloupec a klíč dokumentu odpovídaly jiným dokumentům. Můžeme například konstatovat, že dva dokumenty jsou podobné, pokud mají dobré skóre shody klíčových frází.

Porovnání dokumentů pomocí funkce SEMANTICSIMILARITYTABLE

Porovnejme dokument s jinými dokumenty pomocí SEMANTICSIMILARITYTABLE Funkce.

Porovnání dokumentů všech projektových manažerů

Potřebujeme vidět všechny dokumenty týkající se projektových manažerů. Z výše uvedených příkladů víme, že klíč dokumentu pro zadaný dokument je 0xFF6A92952500812FF013376870181CFA6D7C070220 . Můžeme tedy použít tento klíč k nalezení dalších shod včetně projektových manažerů:

USE EmployeesFilestreamSample-- View all the documents closely related to Peter project managerSELECT SST.source_column_id,SST.matched_column_id,EDS.name,SCORE FROM SEMANTICSIMILARITYTABLE(EmployeesDocumentStore,name,0xFF6A92952500812FF013376870181CFA6D7C070220) SSTINNER JOIN dbo.EmployeesDocumentStore EDS on EDS .path_locator=SST.matched_document_keyorder podle popisu skóre 

Výstup:

Nejblíže související dokument je Stálý zaměstnanec Asif – zkušený projektový manažer.docx . Dává to smysl, protože oba zaměstnanci jsou stálými zaměstnanci a oba jsou projektoví manažeři.

Porovnání dokumentů zkušeného obchodního analytika

Nyní porovnáme dokumenty týkající se zkušeného obchodního analytika s a najděte nejbližší shodu pomocí sémantického vyhledávání. Jsme omezeni na analýzu založenou na názvu dokumentu:

USE EmployeesFilestreamSample-- Hledání dokumentu_klíče pro zkušeného obchodního analytikavyberte jméno,cesta_lokátoru jako klíč_dokumentu z EmployeesDocumentStorewhere názvu jako '%zkušený obchodní analytik%'-- Prohlédněte si všechny dokumenty úzce související se zkušeným obchodním analytikemSELECT SST.source_column_id,SST. matched_column_id,EDS.name,SCORE FROM SEMANTICSIMILARITYTABLE(EmployeesDocumentStore,name,0xFD89E1811D4F3B2FEB1012DF0C8016F9ACEB2F3260) SSTINNER JOIN dboy.ethoreloccement_skóre SSTINNER JOIN dboyepathesdoccument_m=ondkeySterpathesdoccument_m=

Výstup:

Jak vidíme z výše uvedených výsledků, nejbližší shoda pro dokument se týkala zkušeného obchodního analytika je dokument zkušeného projektového manažera protože jsou oba zkušení . Nicméně skóre 0,3 naznačuje, že mezi těmito dvěma dokumenty není mnoho společného.

Závěr

Gratulujeme! Úspěšně jsme se naučili ukládat dokumenty do složek Windows a analyzovat je pomocí sémantického vyhledávání. Prozkoumali jsme také funkce, které lze využít v praxi. Nyní můžete uplatnit nové znalosti a vyzkoušet následující cvičení na

Zůstaňte naladěni na další materiály!


  1. Závažná chyba PHP:Třída 'PDO' nebyla nalezena

  2. SQL SELECT rychlost int vs varchar

  3. Odebrat SCHEMABINDING ze zobrazení na serveru SQL Server

  4. Nějaký dopad na výkon v Oracle při použití LIKE 'string' vs ='string'?