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

Implementace fulltextového vyhledávání v SQL Server 2016 pro pokročilé uživatele

Tento článek popisuje pokročilé metody využití fulltextového vyhledávání pro datové profesionály. Umožňuje lepší vyhledávání v jejich každodenní databázové analýze.

Navíc se čtenáři dostanou nad rámec základních znalostí Fulltextového vyhledávání a jeho implementace. Uvidíte důležitost pokročilé metodologie vyhledávání pomocí Full-Text Search pro získání rychlých a spolehlivých výsledků.

Předpoklady

Nejprve si projdeme předpoklady, protože článek je zaměřen na pokročilé využití Fulltextového vyhledávání.

Know-how T-SQL

Článek předpokládá, že k implementaci tohoto průvodce(ů) jsou čtenáři obeznámeni s psaním a spouštěním skriptů T-SQL proti databázím se základní znalostí SQL Server.

Základy fulltextového vyhledávání

Tento článek také očekává, že čtenáři budou mít základní znalosti o fulltextovém vyhledávání.

Viz Implementace fulltextového vyhledávání v SQL Server 2016 pro začátečníky článek, pokud se chcete seznámit se základními koncepty a implementací fulltextového vyhledávání prostřednictvím průvodce(ů).

Instalace fulltextového vyhledávání

Předpokládejme, že Fulltextové vyhledávání již bylo přidáno do vaší instance SQL.

Pokud jste to ještě neudělali, postupujte podle pokynů v části Implementace fulltextového vyhledávání v SQL Server 2016 pro začátečníky článek, který vám pomůže nainstalovat Fulltextové vyhledávání do vaší instance SQL.

Stav fulltextového vyhledávání můžete zkontrolovat spuštěním následujícího skriptu:

-- Je nainstalováno Full-Text Search a poté 1 nebo 0VYBERTE fulltextserviceproperty('IsFulltextInstalled') jako [Full-Text Search]

Ukázková databáze SQLDevBlogV7

Nyní vytvořte a naplňte ukázkovou databázi s názvem SQLDevBlogV7 s Poznámkami sloupec VARCHAR(MAX) typ. Chcete-li to provést, spusťte následující skript T-SQL proti hlavní databázi:

-- Vytvořit ukázkovou databázi (SQLDevBlogV7)VYTVOŘIT DATABÁZI SQLDevBlogV7;GOUSE SQLDevBlogV7;-- (1) Vytvořit tabulku článků ve vzorové databáziCREATE TABLE [dbo].[Článek] ([ArticleId] INT IDENTITY (1, 1) NOT NULL,[Kategorie] VARCHAR (50) NULL,[Autor] VARCHAR (50) NULL,[Název] VARCHAR (150) NULL,[Publikováno] DATETIME2 (7) NULL,[Poznámky] VARCHAR (MAX) NULL,CONSTRAINT [PK_Článek ] PRIMÁRNÍ KLÍČ (ArticleId));GO-- Obnovení tabulkových dat TRUNCATE TABLE dbo.ArticleGO-- Přidání dat do tabulkySET IDENTITY_INSERT [dbo].[Článek] ONINSERT INTO [dbo].[Článek] ([ArticleId], [Kategorie] , [Autor], [Název], [Publikováno], [Poznámky]) HODNOTY (1, N'Development', N'Atif', N'Introduction to T-SQL Programming ', N'2017-01-01 00:00:00', N'Článek je o programování T-SQL pokrývajícím nejběžněji používané příkazy včetně SELECT.')INSERT INTO [dbo].[Článek] ([ArticleId], [Category], [Autor], [Title] , [Publikováno], [Poznámky]) VALUES (2, N'Testing', N'Peter', N'Database Unit Testing Fundamentals', N'2017-01-10 00:00:00', N'Toto je článek o testování jednotek databáze, abyste se seznámili s testováním jednotek pomocí příkladů a návodů.')INSERT INTO [dbo].[Článek] ([ArticleId], [Category], [Autor], [Title] , [Publikováno], [Poznámky]) VALUES (3, N'Data Analysis', N'Haroon', N'Learn Basic Data Analysis with SQL Window Functions', N'2019-06-12 00:00:00', N'Tento článek je o funkcích okna T-SQL (Transact-SQL) a jejich základním použití v každodenních úlohách analýzy dat.')INSERT INTO [dbo].[Článek] ([ArticleId], [Category], [Autor], [Název], [Publikováno], [Poznámky]) VALUES (4, N'Development', N'Peter', N'Common Table Expressions (CTE)', N'2017-02-10 00:00 :00', N'Toto je článek, který vysvětluje, jak používat CTE v T-SQL k psaní složitých dotazů.')INSERT INTO [dbo].[Článek] ([ArticleId], [Category], [Autor], [ Název], [Publikováno], [Poznámky]) HODNOTY (5, N'Testing', N'Sadaf', N'Manual Testing vs. Automated Testing', N'2017-03-20 00:00:00', N „Tento článek je založen na srovnávací analýze mezi ručním testováním a automatizované testování. Tento článek používá tSQLt k uvedení příkladů automatizovaného testování.')INSERT INTO [dbo].[Článek] ([ArticleId], [Kategorie], [Autor], [Název], [Publikováno], [Poznámky]) HODNOTY (6 , N'Testing', N'Atif', N'Beyond Database Unit Testing', N'2017-11-10 00:00:00', N'There je hodně práce, pokud jde o testování databázových jednotek a tento článek je více o některých metodách pokročilé úrovně pro psaní a spouštění testů jednotek SQL pomocí tSQLt.')INSERT INTO [dbo].[Článek] ([ArticleId], [Category], [Autor], [Title], [Published ], [Poznámky]) HODNOTY (7, N'Testing', N'Sadaf', N'Cross Database Unit Testing', N'2017-12-20 00:00:00', N'Tento článek popisuje složitý scénář testování mezi databázovými jednotkami pomocí testovacích nástrojů třetích stran.')INSERT INTO [dbo].[Článek] ([ArticleId], [Kategorie], [Autor], [Název], [Publikováno], [Poznámky]) HODNOTY (8 , N'Development', N'Haroon', N'How to správně používat T-SQL IsNumeric Function', N'2018-01-10 00:00:00', N'Toto je o funkci IsNumeric, která určuje, zda výraz může b e hodnoceno jako číslo. Zde se výraz může skládat ze symbolů a operátorů, které jsou databázovým strojem SQL Server vyhodnoceny jako jedna datová hodnota.')INSERT INTO [dbo].[Článek] ([ArticleId], [Category], [Autor], [Title ], [Publikováno], [Poznámky]) HODNOTY (9, N'Testing', N'Sadaf', N'Scripting and Testing Database pro začátečníky ', N'2018-02-15 00:00:00', N' Tento článek je založen na skriptování a testování databází SQL pomocí moderních nástrojů a technologií.')INSERT INTO [dbo].[Článek] ([ArticleId], [Category], [Author], [Title], [Published], [Poznámky]) VALUES (10, N'Development', N'Atif', N'Advanced Database Development Methods', N'2018-07-10 00:00:00', N'Tento článek pojednává o moderních nástrojích pro vývoj databází včetně SSDT, SSMS atd.')INSERT INTO [dbo].[Článek] ([ArticleId], [Category], [Autor], [Title], [Published], [Notes]) VALUES (11, N'Testing' , N'Sadaf', N'How to Write Unit Tests for your Database', N'2018-11-10 00:00:00', N'This článek je o psaní testů jednotek pro vaši databázi pomocí MST est.')INSERT INTO [dbo].[Článek] ([ArticleId], [Kategorie], [Autor], [Název], [Publikováno], [Poznámky]) VALUES (12, N'Development', N'Peter ', N'Database Development using Modern Tools', N'2018-12-10 00:00:00', N'V této aritlce ​​je diskutován scénář vývoje databáze pomocí SQL Server Data Tools a SQL Server Management Studio. ')INSERT INTO [dbo].[Článek] ([ČlánekId], [Kategorie], [Autor], [Název], [Publikováno], [Poznámky]) HODNOTY (13, N'DLM', N'Atif', N'Designing, Developing and Deploying Database', N'2019-01-01 00:00:00', N'Tento článek se zaměřuje především na koncepty Azure DevOps a jejich implementaci.')INSERT INTO [dbo]. [Článek] ([ArticleId], [Category], [Autor], [Title], [Published], [Notes]) HODNOTY (14, N'DLM', N'Peter', N'How to Apply Database Lifecycle Management ', N'2019-02-10 00:00:00', N'Tento článek je o DLM.')INSERT INTO [dbo].[Článek] ([ArticleId], [Kategorie], [Autor], [Název ], [Published], [Notes]) VALUES (15, N'Testing', N'Saqib', N'SQL Unit Testing Stored Procedures', N'2019-03-10 00:00:00', N'This článek pojednává o tom, jak napsat unit testy pro proceduru.')INSERT INTO [dbo].[Článek] ([ArticleId], [Category], [Autor], [Title], [Published], [Notes]) VALUES ( 16, N'Reporting', N'Haroon', N'SSRS Reports Development in Simple Terms', N'2019-07-10 22:26:42', N'The article is věnovaný základům vývoje SQL Server Reporting Services (SSRS) a zaměřený na začátečníky i profesionály se zájmem o vývoj databází.')SET IDENTITY_INSERT [dbo].[Článek] OFF

Vytvořit fulltextový katalog

Vytvořte fulltextový katalog pomocí níže uvedeného skriptu nebo pomocí průvodce nastavením:

-- Vytvořit fulltextový katalogVYTVOŘIT FULLTEXTOVÝ KATALOG ČlánekKatalog JAKO VÝCHOZÍ;PŘEJÍT

Definujte fulltextový index v poznámkách

Jakmile je katalog úspěšně vytvořen, definujte Fulltextový index založený na Poznámkách následujícím způsobem (nebo pomocí průvodce nastavením):

-- Definice fulltextového indexuVYTVOŘENÍ FULLTEXTOVÉHO INDEXU NA dbo.Article(Poznámky)KLÍČOVÝ INDEX PK_ArticleWITH STOPLIST =SYSTEM;GO

Kontrola fulltextového katalogu a fulltextového indexu

Rozbalením souvisejících uzlů zobrazíte Fulltextový index a Fulltextový katalog, který jste právě vytvořili:

Nyní jste připraveni spustit fulltextové dotazy podle tabulky zájmu – v našem případě je to článek .

Jednoduchý termín

Hledání slova nebo fráze je snazší než hledání jiných tvarů, proto je také známé jako jednoduchý termín.

Viz Implementace fulltextového vyhledávání v SQL Server 2016 pro začátečníky článek k implementaci základní formy fulltextového dotazu k vyhledání slova nebo fráze.

Nyní si proberme některá potenciální pokročilá vyhledávání prováděná pomocí Fulltextového vyhledávání.

Pokročilé fulltextové vyhledávání pomocí předpony termínu

Termín s předponou odkazuje na slovo s předponou začínající na některá písmena – pak to může být cokoli, co odpovídá danému vzoru. Můžete si to představit jako verzi LIKE pro fulltextové vyhledávání s slovem s předponou*.

Slovo nebo slova ve frázi mohou mít také termín(y) s předponou.

Příklad

Například hledání slova data* nám může poskytnout cokoli počínaje daty v tomto sloupci, jako jsou data, databáze, databáze atd.

Vyhledávání článků souvisejících s vývojem pomocí předpony termínu

Představme si, že máte za úkol vyhledat články související s vývojem a uspořádat je do samostatné vývojářské skupiny pro lepší zážitek ze prohlížení webových stránek.

Řešením je „hledání předpony“ pomocí fulltextového dotazu takto:

--Implementace předponového výrazu Full-Text Hledejte články související s vývojem VYBERTE Název, Poznámky FROM dbo.Článek WHERE CONTAINS(NOTES,'"dev*"')

Výsledky také ukázaly článek o DevOps – nesouvisí s vývojem, proto spustíme jiný skript. Všechny články související s vývojem najde rychleji pomocí fulltextového dotazu, s výjimkou DevOps takto:

--Implementace předponového termínu Full-Text Hledejte články související s vývojem, ale ne DevOpsSELECT Title,Notes FROM dbo.Article WHERE CONTAINS(NOTES,'"dev*"') AND NOT CONTAINS(Notes,'DevOps') 

Výstup je následující:

Upozorňujeme také, že je nezbytné umístit hledané slovo do dvojitých uvozovek, jak je znázorněno ve skriptech výše. Tímto způsobem správně implementujeme vyhledávání výrazu předpony.

Pokročilé fulltextové vyhledávání pomocí skloňovaného formuláře

Někdy potřebujete hledat tvary skloňování slova, které znamenají možné formy, které slovo může mít.

Příklad

Jednoduchým příkladem je slovo „Deploy“, které může mít následující tvary skloňování:

  1. Zavedení
  2. Nasazeno
  3. Nasazení
  4. Nasazení
  5. Nasazení

Skloňovací formy psaní vyhledávání

Podívejme se, co se stane, když spustíme fulltextový dotaz, abychom našli poznámky pro všechny skloňované formy slova write:

-- Vyhledávání flektivních forem slovního zápisu pomocí Full-Text SearchSELECT Title,Notes FROM dbo.Article WHERE CONTAINS(NOTES,'FORMSOF(INFLECTIONAL,write)')

Sloupec Poznámky s řádky obsahujícími obojí zápis a psaní jsou zobrazeny v místě zápis je flektivní forma psát .

Skloněné formy vyhledávání technologií

Máte-li za úkol najít všechny články obsahující různé formy slova technologie, implementujte flektivní formu slova vyhledávání pomocí následujícího skriptu T-SQL:

-- Hledání skloňovaných forem technologie slov pomocí fulltextového vyhledávání SELECT Title,Notes FROM dbo.Article WHERE CONTAINS(NOTES,'FORMSOF(INFLECTIONAL,technology)')

Výstup je následující:

Hledání jednotek bez předpony

Pojďme nyní vytvořit složitější fulltextový dotaz. Prohledá všechny články, aby našel skloňovací formu slova test ale bez předpony jednotka (s výjimkou testování jednotek), protože hledáme články o testování, nikoli o testování jednotek:

-- Hledání flektivních forem slovního testu s vyloučením termínu předpony jednotky pomocí fulltextového vyhledáváníSELECT Title,Notes FROM dbo.Article WHERE CONTAINS(NOTES,'FORMSOF(INFLECTIONAL,test)') AND NOT CONTAINS(NOTES,'"jednotka *"')

V důsledku toho uvidíme pouze záznamy, které jsou manuální , automatizované, nebo jen testování slova jsou uvedena kromě testování jednotek články.

Pokročilé fulltextové vyhledávání pomocí Proximity Search

Využijme naše praktické zkušenosti s používáním blízkého vyhledávání spuštěním fulltextového dotazu.

Vyhledávací dotaz/výraz v blízkosti

Tato forma fulltextového vyhledávání vám umožňuje vyhledávat slova nebo fráze, které jsou blízko sebe. Je velmi užitečné najít záznamy, když jsou některá slova nebo fráze umístěna velmi těsně.

Příklad

Dobrým příkladem blízkost vyhledávání je hledání záznamů, kde je slovo fotbal je blízko slova země získat informace pouze o fotbalových hřištích.

Vyhledejte „pokročilé blízké testování“ pomocí Proximity Term

Pokud chcete vyhledat všechny články, kde je zmíněno pokročilé testování, aniž byste se řídili nějakým konkrétním pořadím, nejlepší možností je použít blízké vyhledávání, protože u požadovaného sloupce je nastaveno Full-Text Search.

Napište následující skript pro vyhledání slova pokročilý poblíž slova testování v libovolném pořadí ve sloupci Poznámky:

-- Hledejte slovo pokročilé v blízkosti slovního testování pomocí blízkého vyhledávání (Fulltextové vyhledávání) VYBERTE POZNÁMKY Z dbo.Article WHERE CONTAINS (POZNÁMKY,'NEAR(pokročilé,testování)')

Výsledky jsou následující:

Výsledky nám ukázaly poznámky, kde je zmíněno testování metodami pokročilé úrovně a to je to, co jsme hledali. Můžeme také určit vzdálenost mezi dvěma slovy.

Vyhledávání na vzdálenost nejvýše 2 slov

Nakonec spusťte fulltextový dotaz s použitím výrazu blízkosti, abyste zjistili každý scénář databáze, kde je slovo databáze je blízko slova scénář ale ne více než 2 slova od sebe.

-- Hledejte databázi slov poblíž scénáře slov ne více než 2 slova od sebe pomocí blízkého vyhledávání (Fulltext Search) VYBERTE POZNÁMKY Z dbo.Article WHERE CONTAINS (NOTES,'NEAR((databáze,scénář),2,TRUE )')

Výstup je následující:

Výsledkem je článek, kde scénář vývoje databáze zmíněný byl úspěšně zobrazen.

Díky tomu jste se úspěšně naučili psát pokročilé fulltextové dotazy proti libovolnému sloupci. To vám pomůže splnit sofistikované požadavky na vyhledávání, abyste byli připraveni spustit fulltextové vyhledávání ve scénářích vašeho profesního života, kdykoli je to možné.

Co dělat

Nyní, když můžete psát pokročilé fulltextové dotazy, měli byste vyzkoušet tyto věci, abyste zlepšili své dovednosti:

  1. Zkuste vyhledat všechny články, kde je předponou slovo auto se používá.
  2. S ohledem na tento článek se pokuste napsat skript, pomocí kterého budete vyhledávat podle blízkosti a najít všechny řádky, kde je slovo moderní je blízko slova nástroje .
  3. Zkuste najít všechny tvary skloňování slova napsal .

  1. Jak funguje AUTOINCREMENT v SQLite

  2. Přesun databází SQL Serveru do cloudu

  3. Funkce s SQL dotazem nemá žádný cíl pro výsledná data

  4. Jak opravit serializovaný řetězec, který byl poškozen nesprávnou délkou počtu bajtů?