Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Внедряване на пълнотекстово търсене в SQL Server 2016 за напреднали потребители

Тази статия разказва за усъвършенстваните методи за използване на пълнотекстово търсене за специалисти по данни. Той позволява по-добро търсене при ежедневния им анализ на база данни.

Освен това читателите ще надхвърлят основните познания за пълнотекстово търсене и неговото прилагане. Ще видите значението на разширената методология за търсене, използваща пълнотекстово търсене, за да получите бързи и надеждни резултати.

Предварителни условия

Първо, нека преминем през предпоставките, тъй като статията е фокусирана върху разширено използване на пълнотекстово търсене.

Ну-хау за T-SQL

Статията предполага, че за прилагане на прехода(ите), читателите са запознати с писането и изпълнението на T-SQL скриптове срещу бази данни с основно разбиране на SQL Server.

Основи на пълнотекстово търсене

Тази статия също очаква читателите да имат основно разбиране за пълнотекстово търсене.

Моля, вижте Внедряване на пълнотекстово търсене в SQL Server 2016 за начинаещи статия, ако искате да се запознаете с основните концепции и прилагането на пълнотекстово търсене чрез преглед(и).

Инсталиране на пълнотекстово търсене

Да предположим, че пълнотекстово търсене вече е добавено към вашия SQL екземпляр.

Ако все още не сте го направили, следвайте инструкциите в Внедряване на пълнотекстово търсене в SQL Server 2016 за начинаещи статия, която да ви помогне да инсталирате пълнотекстово търсене във вашия SQL екземпляр.

Можете да проверите състоянието на пълнотекстово търсене, като изпълните следния скрипт:

-- Инсталирано ли е пълнотекстово търсене, след това 1 или 0SELECT fulltextserviceproperty('IsFulltextInstalled') като [Full-Text Search]

Примерна база данни SQLDevBlogV7

Сега създайте и попълнете примерна база данни, наречена SQLDevBlogV7 с Бележки колона от VARCHAR(MAX) Тип. За да го направите, изпълнете следния T-SQL скрипт срещу главната база данни:

-- Създаване на примерна база данни (SQLDevBlogV7)СЪЗДАВАНЕ НА БАЗА ДАННИ SQLDevBlogV7;GOUSE SQLDevBlogV7;-- (1) Създаване на таблица със статии в примерната база данниCREATE TABLE [dbo].[Article] ([ArticleId] INT IDENTITY (1, 1) НЕ НЕ NULL,[Категория] VARCHAR (50) NULL,[Автор] VARCHAR (50) NULL,[Заглавие] VARCHAR (150) NULL,[Публикувано] DATETIME2 (7) NULL,[Бележки] VARCHAR (MAX) NULL,CONSTRAINT [PK_Ar ] PRIMARY KEY (ArticleId));GO-- Нулиране на таблични данни TRUNCATE TABLE dbo.ArticleGO-- Добавяне на данни към таблицатаSET IDENTITY_INSERT [dbo].[Статия] ONINSERT INTO [dbo].[Article] ([ArticleId], [Category]) , [Автор], [Заглавие], [Публикувано], [Бележки]) СТОЙНОСТИ (1, N'Разработка', N'Atif', N'Въведение в програмирането на T-SQL', N'2017-01-01 00:00:00', N'Статията е за програмирането на T-SQL, обхващащо най-често използваните изрази, включително SELECT.')INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title]) , [Публикувано], [Бележки]) СТОЙНОСТИ (2, N'Testing', N'Peter', N'Database Unit Testing Fundamentals', N'2017-01-10 00:00:00', N'Това е статия за модулно тестване на базата данни, за да се запознаете с тестването на модули с помощта на примери и инструкции.')ВМЪКНЕТЕ В [dbo].[Статия] ([ArticleId], [Категория], [Автор], [Заглавие] , [Публикувано], [Бележки]) СТОЙНОСТИ (3, N'Data Analysis', N'Haroon', N'Learn Basic Data Analysis with SQL Window Functions', N'2019-06-12 00:00:00', N'Тази статия е за функциите на прозореца на T-SQL (Transact-SQL) и тяхната основна употреба в ежедневните задачи за анализ на данни.')INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Категория], [Автор], [Заглавие], [Публикувано], [Бележки]) СТОЙНОСТИ (4, N'Развитие', N'Peter', N'Общи таблични изрази (CTE)', N'2017-02-10 00:00 :00', N'Това е статия, която обяснява как да използвате CTE в T-SQL за писане на сложни заявки.')INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [] Заглавие], [Публикувано], [Бележки]) СТОЙНОСТИ (5, N'Testing', N'Sadaf', N'Ръчно тестване срещу автоматизирано тестване', N'2017-03-20 00:00:00', N „Тази статия се основава на сравнителния анализ между ръчното тестване и автоматизирано тестване. Тази статия използва tSQLt, за да даде примери за автоматизирано тестване.')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'Има много неща за правене, когато става въпрос за тестване на единици на базата данни и тази статия е повече за някои методи на усъвършенствано ниво за писане и стартиране на тестове на SQL модули с помощта на tSQLt.')INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published]). ], [Бележки]) VALUES (7, N'Testing', N'Sadaf', N'Cross Database Unit Testing', N'2017-12-20 00:00:00', N'Тази статия обхваща сложен сценарий на кръстосано тестване на единици от база данни с помощта на инструменти за тестване на трети страни.')ВМЕСЕТЕ В [dbo].[Статия] ([ArticleId], [Категория], [Автор], [Заглавие], [Публикувано], [Бележки]) СТОЙНОСТИ (8) (8) , N'Разработка', N'Haroon', N'Как правилно да използваме T-SQL IsNumeric функция', N'2018-01-10 00:00:00', N'Това е за IsNumeric функция, която определя дали изразяване може б e се оценява като число. Тук изразът може да се състои от символи и оператори, които се оценяват като единична стойност на данните от SQL Server Database Engine.')INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title]). ], [Публикувано], [Бележки]) СТОЙНОСТИ (9, N'Testing', N'Sadaf', N'Scripting and Testing Database за начинаещи', N'2018-02-15 00:00:00', N' Тази статия се основава на скриптове и тестване на SQL бази данни с помощта на съвременни инструменти и технологии.')ВМЪКНЕТЕ В [dbo].[Статия] ([ArticleId], [Категория], [Автор], [Заглавие], [Публикувано], [Бележки]) ЦЕННОСТИ (10, N'Development', N'Atif', N'Advanced Database Development Methods', N'2018-07-10 00:00:00', N'Тази статия говори за съвременни инструменти за разработка на бази данни включително SSDT, SSMS и т.н.')ВМЕСЕТЕ В [dbo].[Статия] ([ArticleId], [Категория], [Автор], [Заглавие], [Публикувано], [Бележки]) СТОЙНОСТИ (11, N'Testing') , N'Sadaf', N'Как да напишем единични тестове за вашата база данни', N'2018-11-10 00:00:00', N'Тази статия е за писане на модулно тестване за вашата база данни с помощта на MST est.')INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (12, N'Development', N'Peter) ', N'Разработване на база данни с помощта на съвременни инструменти', N'2018-12-10 00:00:00', N'В този член се обсъжда сценарий за разработка на база данни с помощта на SQL Server Data Tools и SQL Server Management Studio. ')ВЪВЕТЕ В [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (13, N'DLM', N'Atif', N'Проектиране, разработване и внедряване на база данни', N'2019-01-01 00:00:00', N'Концепциите около Azure DevOps и тяхното внедряване са основният фокус на тази статия.')INSERT INTO [dbo]. [Статия] ([ArticleId], [Категория], [Автор], [Заглавие], [Публикувано], [Бележки]) СТОЙНОСТИ (14, N'DLM', N'Peter', N'Как да прилагате управление на жизнения цикъл на базата данни ', N'2019-02-10 00:00:00', N'Тази статия е за DLM.')INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title]). ], [Публикувано], [Бележки]) СТОЙНОСТИ (15, N'Testing', N'Saqib', N'SQL Unit Testing Stored Procedures', N'2019-03-10 00:00:00', N'This статията говори за това как да се напишат единични тестове за процедура.')INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES ([Dbo]). 16, N'Reporting', N'Haroon', N'SSRS Развитие на докладите с прости думи', N'2019-07-10 22:26:42', N'Статията е посветен на основите на разработката на SQL Server Reporting Services (SSRS) и насочен към начинаещи и професионалисти, които се интересуват от разработване на бази данни.')ЗАДАДЕТЕ IDENTITY_INSERT [dbo].[Статия] ИЗКЛЮЧЕНО

Създаване на пълнотекстов каталог

Създайте пълен текстов каталог, като използвате скрипта по-долу или с помощта на съветника за настройка:

-- Създаване на пълнотекстов каталогСЪЗДАВАНЕ НА ПЪЛТЕКСТОВ КАТАЛОГ Статии Каталог ПО ПОДРАЗБИРАНЕ; GO

Дефиниране на пълнотекстов индекс на бележки

След като каталогът е създаден успешно, дефинирайте пълнотекстов индекс въз основа на Бележки колона, както следва (или с помощта на съветника за настройка):

-- Дефиниране на пълнотекстов индекс СЪЗДАВАНЕ НА ПЪЛТЕКСТОВ ИНДЕКС В dbo.Article(Notes)KEY INDEX PK_ArticleWITH STOPLIST =SYSTEM;GO

Пълен текстов каталог и пълен текстов индекс Проверка

Разгънете свързаните възли, за да видите индекса с пълен текст и пълнотекстовия каталог, които току-що създадохте:

Вече сте готови да изпълнявате пълнотекстови заявки към таблицата, която ви интересува – в нашия случай това е Статия .

Прост термин

Търсенето на дума или фраза е по-лесно от търсенето на други форми, така че е известно още като прост термин.

Вижте Внедряване на пълнотекстово търсене в SQL Server 2016 за начинаещи статия за прилагане на основна форма на пълнотекстова заявка за търсене на дума или фраза.

Сега нека обсъдим някои от потенциалните разширени търсения, направени с пълнотекстово търсене.

Разширено пълнотекстово търсене с префиксен термин

Терминът с префикс се отнася до дума с префикс, започваща с някои букви - тогава може да бъде всичко, което съответства на този модел. Можете да го мислите като версия за пълнотекстово търсене на LIKE с представка*.

Дума или думи в рамките на фраза могат също да имат термин(ове).

Пример

Например търсене на думата данни* може да ни даде всичко, започващо с данни в тази колона, като данни, база данни, бази данни и т.н.

Търсене на статии, свързани с разработчиците, използвайки термин за префикс

Нека си представим, че имате задача да търсите статии, свързани с разработката, за да ги организирате в отделна група за разработка за по-добро изживяване при гледане на уебсайт.

Решението е „търсене на термини с префикс“, като се използва пълнотекстова заявка, както следва:

--Внедряване на префиксен термин Търсене в пълен текст, за да намерите свързани с разработчика статии ИЗБЕРЕТЕ заглавие, бележки ОТ dbo.Статия КЪДЕ СЪДЪРЖА(ЗАБЕЛЕЖКИ,'"dev*"')

Резултатите показаха и статията за DevOps – не е свързано с разработчиците, затова стартираме друг скрипт. Той ще намери по-бързо всички статии, свързани с разработчиците, като използва заявка за пълен текст, с изключение на DevOps, както следва:

--Внедряване на префиксен термин Търсене в пълен текст за намиране на статии, свързани с разработчиците, но не и заглавие на DevOpsSELECT, бележки ОТ dbo. Член КЪДЕ СЪДЪРЖА(ЗАБЕЛЕЖКИ,'"dev*"') И НЕ СЪДЪРЖА (Бележки,'DevOps') 

Резултатът е както следва:

Също така имайте предвид, че е важно да поставите думата за търсене в двойни кавички, както е показано в скриптовете по-горе. Правейки това, ние прилагаме правилно търсенето на термини по префикс.

Разширено търсене в пълен текст с помощта на флективна форма

Понякога трябва да търсите флективни форми на дума, което означава възможни форми, които една дума може да приеме.

Пример

Прост пример е думата „Разгръщане“, която може да има следните флективни форми:

  1. Разгръща се
  2. Внедрено
  3. Внедряване
  4. Внедряване
  5. Внедряване

Флективни форми на търсене за писане

Нека видим какво ще се случи, ако изпълним заявка за пълен текст, за да намерим бележки за всички флективни форми на думата write:

-- Търсене във флективни форми на дума за писане с помощта на пълнотекстово търсенеSELECT Title, Бележки ОТ dbo. Член, КЪДЕТО СЪДЪРЖА(ЗАБЕЛЕЖКИ,'FORMSOF(INFLECTIONAL,write)')

Колоната Бележки с редове, съдържащи и двете записване и писване са показани къде пишете е флективна форма на пиша .

Флективни форми на търсене на технологии

Ако имате задача да намерите всички статии, съдържащи различни форми на технологичната дума, тогава внедрете флективна форма на търсене на думи, като използвате следния T-SQL скрипт:

-- Търсене във флективни форми на технологията на думите с помощта на пълнотекстово търсенеSELECT Title, Бележки ОТ dbo. Член, КЪДЕТО СЪДЪРЖА(ЗАБЕЛЕЖКИ,'FORMSOF(INFLECTIONAL,technology)')

Резултатът е както следва:

Търсене на единици с термини без префикс

Нека сега да изградим по-сложна заявка за пълен текст. Той ще търси всички статии, за да намери флективна форма на думата тест но без префикс термин единица (с изключение на модулното тестване), тъй като търсим статиите за тестване, а не за тестване на единици:

-- Търсене във флективни форми на тест за думи, с изключение на термин за префикс на единица, като се използва пълнотекстово търсенеSELECT Title, Бележки ОТ dbo. Член, КЪДЕТО СЪДЪРЖА(ЗАБЕЛЕЖКИ,'FORMSOF(INFLECTIONAL,test)') И НЕ СЪДЪРЖА (БЕЛЕЖКИ,'"единица *"')

В резултат на това ще видим само записи, където ръчно , автоматизирани, или просто тестване думите са споменати с изключение на единично тестване статии.

Разширено пълнотекстово търсене чрез търсене в близост

Нека използваме нашия практически опит за използване на търсене в близост, като изпълним пълнотекстова заявка.

Търсене/термин в близост

Тази форма на пълнотекстово търсене ви позволява да търсите думи или фрази, които са близо една до друга. Много е удобно да намирате записи, когато някои думи или фрази са разположени много плътно.

Пример

Добър пример за търсене в близост е търсенето на записи, където думата футбол е близо до думата земя за да получите информация само за футболни игрища.

Търсете „разширено близко тестване“ с помощта на термин за близост

Ако искате да търсите всички статии, в които се споменава разширеното тестване, без да следвате конкретен ред, най-добрият ви вариант е да използвате търсене в близост, като се има предвид, че пълнотекстово търсене е настроено срещу желаната колона.

Напишете следния скрипт, за да търсите думата разширени близо до думата тестване в произволен ред в колоната Бележки:

-- Търсене на разширена дума за тестване в близост до думи с помощта на търсене в близост (пълнотекстово търсене) ИЗБЕРЕТЕ БЕЛЕЖКИ ОТ dbo. Статия, КЪДЕТО СЪДЪРЖА (ЗАБЕЛЕЖКИ, 'БЛИЗО (разширено, тестване)')

Резултатите са както следва:

Резултатите ни показаха бележките, където тестването се споменава чрез методи на напреднало ниво и това е, което търсихме. Можем също да посочим разстоянието между две думи.

Търсене с не повече от 2 думи една от друга

И накрая, изпълнете заявка с пълен текст, използвайки термин за близост, за да разберете всеки сценарий на база данни, където думата база данни е близо до думата сценарий но не повече от 2 думи една от друга.

-- Търсене на база данни с думи близо до сценарий на думи на не повече от 2 думи една от друга, като използвате търсене в близост (пълнотекстово търсене) ИЗБЕРЕТЕ БЕЛЕЖКИ ОТ dbo. Член КЪДЕ СЪДЪРЖА (БЕЛЕЖКИ,'БЛИЗО((база данни,сценарий),2,ВЯРНО )')

Резултатът е както следва:

В резултат на това статията е сценарий за развитие на база данни споменато е показано успешно.

С това успешно сте се научили да пишете разширени пълнотекстови заявки срещу всяка колона. Това ви помага да изпълните сложни изисквания за търсене, за да сте готови да стартирате пълнотекстово търсене в сценариите на професионалния си живот, където е приложимо.

Неща за правене

Сега, когато можете да пишете разширени заявки с пълен текст, трябва да опитате тези неща, за да подобрите уменията си:

  1. Опитайте се да потърсите всички статии, в които думата с префикс auto се използва.
  2. Имайки предвид тази статия, опитайте се да напишете скрипт за търсене в близост, за да намерите всички редове, където думата модерно е близо до думата инструменти .
  3. Опитайте се да намерите всички флективни форми на думата написал .

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как преброявате броя на появяванията на определен подниз в SQL varchar?

  2. SQL Server 2016:Възстановяване на база данни

  3. някакво ограничение на броя на връзките със SQL Server?

  4. Грешка в заявката с двусмислено име на колона в SQL

  5. кръстосаното прилагане на xml заявката работи експоненциално по-зле с нарастването на xml документа