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

Implementering af fuldtekstsøgning i SQL Server 2016 for avancerede brugere

Denne artikel fortæller om avancerede metoder til brug af fuld tekstsøgning for dataprofessionelle. Det muliggør en bedre søgeoplevelse i deres daglige databaseanalyse.

Derudover vil læserne komme ud over grundlæggende viden om fuldtekstsøgning og implementeringen heraf. Du vil se vigtigheden af ​​avanceret søgemetode ved hjælp af fuldtekstsøgning for at få hurtige og pålidelige resultater.

Forudsætninger

Lad os først gennemgå forudsætningerne, da artiklen er fokuseret på avanceret brug af fuldtekstsøgning.

T-SQL Know-How

Artiklen antager, at for at implementere gennemgangen(e) er læserne fortrolige med at skrive og køre T-SQL-scripts mod databaser med en grundlæggende forståelse af SQL Server.

Grundlæggende om fuldtekstsøgning

Denne artikel forventer også, at læserne har en grundlæggende forståelse af fuldtekstsøgning.

Se venligst Implementering af fuldtekstsøgning i SQL Server 2016 for begyndere artikel, hvis du gerne vil blive fortrolig med grundlæggende begreber og implementering af fuldtekstsøgning via gennemgang(er).

Installation af fuld tekstsøgning

Lad os antage, at fuldtekstsøgning allerede er blevet tilføjet til din SQL-instans.

Hvis du ikke har gjort det endnu, skal du følge instruktionerne i Implementering af fuldtekstsøgning i SQL Server 2016 for begyndere artikel for at hjælpe dig med at installere Full-Text Search til din SQL-instans.

Du kan kontrollere status for fuld tekstsøgning ved at udføre følgende script:

-- Is Full-Text Search installed then 1 or 0
SELECT fulltextserviceproperty('IsFulltextInstalled') as [Full-Text Search]

Eksempel på SQLDevBlogV7-database

Opret og udfyld nu en eksempeldatabase kaldet SQLDevBlogV7 have Noter kolonne af VARCHAR(MAX) type. For at gøre det skal du køre følgende T-SQL-script mod masterdatabasen:

-- Create sample database (SQLDevBlogV7)
CREATE DATABASE SQLDevBlogV7;
GO


USE SQLDevBlogV7;


-- (1) Create Article table in the sample database
CREATE TABLE [dbo].[Article] (
[ArticleId] INT IDENTITY (1, 1) NOT NULL,
[Category] VARCHAR (50) NULL,
[Author] VARCHAR (50) NULL,
[Title] VARCHAR (150) NULL,
[Published] DATETIME2 (7) NULL,
[Notes] VARCHAR (MAX) NULL,
CONSTRAINT [PK_Article] PRIMARY KEY (ArticleId)

);

GO

-- Reset tabular data
TRUNCATE TABLE dbo.Article
GO

-- Add data to the table
SET IDENTITY_INSERT [dbo].[Article] ON

INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (1, N'Development', N'Atif', N'Introduction to T-SQL Programming ', N'2017-01-01 00:00:00', N'The article is about T-SQL programming covering most commonly used statements including SELECT.')

INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (2, N'Testing', N'Peter', N'Database Unit Testing Fundamentals', N'2017-01-10 00:00:00', N'This is a database unit testing article to get familiar with unit testing with the help of examples and walkthroughs.')

INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (3, N'Data Analysis', N'Haroon', N'Learn Basic Data Analysis with SQL Window Functions', N'2019-06-12 00:00:00', N'This article is about T-SQL (Transact-SQL) Window functions and their basic use in day-to-day data analysis tasks.')

INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (4, N'Development', N'Peter', N'Common Table Expressions (CTE)', N'2017-02-10 00:00:00', N'This is an article which explains how to use CTE in T-SQL to write complex queries.')

INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (5, N'Testing', N'Sadaf', N'Manual Testing vs. Automated Testing', N'2017-03-20 00:00:00', N'This article is based on the comparative anlaysis between manual testing and automated testing. This article uses tSQLt to give examples of automated testing.')

INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (6, N'Testing', N'Atif', N'Beyond Database Unit Testing', N'2017-11-10 00:00:00', N'There is a lot to do when it comes to the database unit testing and this article is more about the some advanced level methods to write and run SQL unit tests using tSQLt.')

INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (7, N'Testing', N'Sadaf', N'Cross Database Unit Testing', N'2017-12-20 00:00:00', N'This article covers a complex scenario of cross database unit testing using 3rd party testing tools.')

INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (8, N'Development', N'Haroon', N'How to Properly Use the T-SQL IsNumeric Function', N'2018-01-10 00:00:00', N'This is about IsNumeric function which determines whether an expression can be evaluated as a number. Here, the expression can consist of symbols and operators which are evaluated as a single data value by SQL Server Database Engine.')

INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (9, N'Testing', N'Sadaf', N'Scripting and Testing Database for beginners ', N'2018-02-15 00:00:00', N'This article is based on the scripting and testing of SQL databases using modern tools and technologies.')

INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (10, N'Development', N'Atif', N'Advanced Database Development Methods', N'2018-07-10 00:00:00', N'This article talks about modern database development tools including SSDT, SSMS etc.')

INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [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 article is about writing unit testing for your database using MSTest.')

INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (12, N'Development', N'Peter', N'Database Development using Modern Tools', N'2018-12-10 00:00:00', N'In this aritlce a database development scenario is dicussed using SQL Server Data Tools and SQL Server Management Studio. ')

INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (13, N'DLM', N'Atif', N'Designing, Developing and Deploying Database', N'2019-01-01 00:00:00', N'The concepts around Azure DevOps and their implementation is the main focus of this article.')

INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (14, N'DLM', N'Peter', N'How to Apply Database Lifecycle Management', N'2019-02-10 00:00:00', N'This article is about DLM.')

INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (15, N'Testing', N'Saqib', N'SQL Unit Testing Stored Procedures', N'2019-03-10 00:00:00', N'This article talks about how to write unit tests for a procedure.')

INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [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 dedicated to the fundamentals of SQL Server Reporting Services (SSRS) development and aimed at beginners and professionals interested in database development.')

SET IDENTITY_INSERT [dbo].[Article] OFF

Opret fuldtekstkatalog

Opret fuldtekstkatalog ved hjælp af scriptet nedenfor eller ved hjælp af opsætningsguiden:

-- Create Full-Text Catalog
CREATE FULLTEXT CATALOG ArticleCatalog AS DEFAULT;
GO

Definer fuldtekstindeks på noter

Når kataloget er oprettet, skal du definere et fuldtekstindeks baseret på Noter kolonne som følger (eller ved at bruge opsætningsguiden):

-- Define Full-Text Index
CREATE FULLTEXT INDEX ON dbo.Article(Notes)
KEY INDEX PK_Article
WITH STOPLIST = SYSTEM;
GO

Fuldtekstkatalog og fuldtekstindekskontrol

Udvid relaterede noder for at se Full-Text Index og Full-Text Catalogue, du lige har oprettet:

Nu er du klar til at køre Full-Text-forespørgsler mod interessetabellen – i vores tilfælde er det Artikel .

Simpelt udtryk

At søge efter et ord eller en sætning er nemmere end at søge efter andre former, så det er også kendt som et simpelt udtryk.

Se Implementering af fuldtekstsøgning i SQL Server 2016 for begyndere artikel for at implementere en grundlæggende form for en fuldtekstforespørgsel for at søge efter et ord eller en sætning.

Lad os nu diskutere nogle af de potentielle avancerede søgninger, der er foretaget ved hjælp af fuldtekstsøgning.

Avanceret fuldtekstsøgning med præfiksudtryk

Et præfiksled refererer til et præfiksord, der starter med nogle bogstaver – det kan så være alt, der matcher det mønster. Du kan tænke på det som en fuldtekstsøgningsversion af LIKE med præfiksord*.

Et eller flere ord i en sætning kan også have præfiksudtryk.

Eksempel

For eksempel at søge efter ordet data* kan skaffe os alt, der starter med data i den kolonne, såsom data, database, databaser osv.

Udviklerrelaterede artikler Søg med præfiksudtryk

Lad os forestille os, at du har til opgave at søge efter udviklingsrelaterede artikler for at organisere dem i en separat udviklingsgruppe for en bedre visningsoplevelse på webstedet.

Løsningen er 'prefix term search' ved at bruge en fuldtekstforespørgsel som følger:

--Implementing Prefix Term Full-Text Seach to find dev related articles
SELECT Title,Notes FROM dbo.Article WHERE CONTAINS(NOTES,'"dev*"')

Resultaterne viste også artiklen om DevOps – det er ikke dev-relateret, det er derfor, vi kører et andet script. Det vil finde alle dev-relaterede artikler hurtigere ved at bruge en fuldtekst-forespørgsel, undtagen DevOps som følger:

--Implementing Prefix Term Full-Text Seach to find dev related articles but not DevOps
SELECT Title,Notes FROM dbo.Article WHERE CONTAINS(NOTES,'"dev*"') AND NOT CONTAINS(Notes,'DevOps')

Udgangen er som følger:

Bemærk også, at det er vigtigt at sætte søgeordet i dobbelte anførselstegn som vist i scripts ovenfor. Ved at gøre dette implementerer vi præfiksettermsøgning korrekt.

Avanceret fuldtekstsøgning ved hjælp af bøjningsform

Nogle gange har du brug for at søge efter bøjningsformer af et ord, der betyder mulige former, et ord kan antage.

Eksempel

Et simpelt eksempel er ordet "Deploy", som kan have følgende bøjningsformer:

  1. Installerer
  2. Implementeret
  3. Implementering
  4. Implementeringer
  5. Implementering

Bøjningsformer for skrivesøgning

Lad os se, hvad der sker, hvis vi kører en fuldtekstforespørgsel for at finde noter til alle bøjningsformer af ordet skriv:

-- Searching inflectional forms of word write using Full-Text Search

SELECT Title,Notes FROM dbo.Article WHERE CONTAINS(NOTES,'FORMSOF(INFLECTIONAL,write)')

Noter-kolonnen med rækker, der indeholder både skriv og skrivning vises, hvor du skriver er en bøjningsform for skriv .

Bøjningsformer for teknologisøgning

Hvis du får til opgave at finde alle artikler, der indeholder forskellige former for teknologiordet, skal du implementere en bøjningsform af ordsøgningen ved hjælp af følgende T-SQL-script:

-- Searching inflectional forms of word technology using Full-Text Search
SELECT Title,Notes FROM dbo.Article WHERE CONTAINS(NOTES,'FORMSOF(INFLECTIONAL,technology)')

Udgangen er som følger:

Ingen præfiks-udtryksenhedssøgning

Lad os nu konstruere en mere kompleks fuldtekstforespørgsel. Den vil søge efter alle artikler for at finde en bøjningsform af ordet test men uden præfiks term enhed (undtagen enhedstestning), da vi leder efter artiklerne om test, ikke om enhedstestning:

-- Searching inflectional forms of word test excluding unit prefix term using Full-Text Search
SELECT Title,Notes FROM dbo.Article WHERE CONTAINS(NOTES,'FORMSOF(INFLECTIONAL,test)') AND NOT CONTAINS(NOTES,'"unit*"')

Som et resultat vil vi kun se poster, hvor de er manuelle , automatiseret, eller bare testning ord er nævnt undtagen enhedstest artikler.

Avanceret fuldtekstsøgning ved hjælp af nærhedssøgning

Lad os bruge vores praktiske erfaring med at bruge nærhedssøgning ved at køre en fuldtekstforespørgsel.

Nærhedssøgning/Term

Denne form for fuldtekstsøgning giver dig mulighed for at søge efter ord eller sætninger, der er tæt på hinanden. Det er meget praktisk at finde poster, når nogle ord eller sætninger er placeret meget stramt.

Eksempel

Et godt eksempel på en nærhedssøgning er at søge efter poster, hvor ordet fodbold er nær ordet jord kun at få oplysninger om fodboldbaner.

Søg efter 'avanceret nærtest' ved hjælp af Proximity Term

Hvis du vil søge efter alle de artikler, hvor avanceret test er nævnt uden at følge nogen bestemt rækkefølge, er din bedste mulighed at bruge nærhedssøgning, da Full-Text Search er sat op mod den ønskede kolonne.

Skriv følgende script for at søge efter ordet avanceret nær ordet testing i vilkårlig rækkefølge i kolonnen Noter:

-- Search for word advanced near word testing using proximity search (Full-Text Search)
SELECT NOTES FROM dbo.Article WHERE CONTAINS (NOTES,'NEAR(advanced,testing)')

Resultaterne er som følger:

Resultaterne viste os de noter, hvor test er nævnt ved metoder på avanceret niveau, og det var det, vi ledte efter. Vi kan også angive afstanden mellem to ord.

Søgning med højst 2 ord fra hinanden

Kør endelig en fuldtekstforespørgsel ved hjælp af nærhedsterm for at finde ud af hvert databasescenarie, hvor ordet database er i nærheden af ​​ordet scenario men ikke mere end 2 ord fra hinanden.

-- Search for word database near word scenario not more than 2 words apart using proximity search (Full-Text Search)
SELECT NOTES FROM dbo.Article WHERE CONTAINS (NOTES,'NEAR((database,scenario),2,TRUE)')

Udgangen er som følger:

Som et resultat heraf artiklen, hvor databaseudviklingsscenarie er nævnt er blevet vist med succes.

Med dette har du med succes lært at skrive avancerede fuldtekstforespørgsler mod enhver kolonne. Dette hjælper dig med at opfylde sofistikerede søgekrav for at være klar til at køre Full-Text Search i dine professionelle scenarier, hvor det er relevant.

Ting at gøre

Nu hvor du kan skrive avancerede fuldtekstforespørgsler, bør du prøve disse ting for at forbedre dine færdigheder:

  1. Prøv at søge efter alle de artikler, hvor ordet auto er foranstillet bruges.
  2. Husk på denne artikel, prøv at skrive et script for at udføre nærhedssøgning for at finde alle rækker, hvor ordet moderne er i nærheden af ​​ordet værktøjer .
  3. Prøv at finde alle bøjningsformer af ordet skrev .

  1. Sådan vælger du en brugervenlig database til din virksomhed

  2. datetime vs datetime2 i SQL Server:Hvad er forskellen?

  3. Oprettelse af en CTE i Oracle

  4. Installer Mtop (MySQL Database Server Monitoring) i RHEL/CentOS 6/5/4, Fedora 17-12