Dieser Artikel beschreibt fortgeschrittene Methoden der Verwendung der Volltextsuche für Datenexperten. Es ermöglicht eine bessere Sucherfahrung in ihrer täglichen Datenbankanalyse.
Darüber hinaus werden den Lesern grundlegende Kenntnisse der Volltextsuche und ihrer Implementierung vermittelt. Sie werden sehen, wie wichtig eine erweiterte Suchmethodik mit Volltextsuche ist, um schnelle und zuverlässige Ergebnisse zu erhalten.
Voraussetzungen
Lassen Sie uns zunächst die Voraussetzungen durchgehen, da sich der Artikel auf die fortgeschrittene Verwendung der Volltextsuche konzentriert.
T-SQL-Know-how
Der Artikel geht davon aus, dass die Leser zum Implementieren der exemplarischen Vorgehensweisen mit dem Schreiben und Ausführen von T-SQL-Skripts für Datenbanken vertraut sind und über grundlegende Kenntnisse von SQL Server verfügen.
Grundlagen der Volltextsuche
Dieser Artikel erwartet außerdem, dass die Leser über ein grundlegendes Verständnis der Volltextsuche verfügen.
Weitere Informationen finden Sie unter Implementieren der Volltextsuche in SQL Server 2016 für Anfänger Artikel, wenn Sie sich mit den grundlegenden Konzepten und der Implementierung der Volltextsuche über Walk-Through(s) vertraut machen möchten.
Installation der Volltextsuche
Nehmen wir an, dass die Volltextsuche bereits zu Ihrer SQL-Instanz hinzugefügt wurde.
Wenn Sie dies noch nicht getan haben, befolgen Sie die Anweisungen im Abschnitt Implementieren der Volltextsuche in SQL Server 2016 für Anfänger Artikel, der Ihnen hilft, die Volltextsuche in Ihrer SQL-Instanz zu installieren.
Sie können den Status der Volltextsuche überprüfen, indem Sie das folgende Skript ausführen:
-- Is Full-Text Search installed then 1 or 0 SELECT fulltextserviceproperty('IsFulltextInstalled') as [Full-Text Search]
Beispieldatenbank SQLDevBlogV7
Erstellen und füllen Sie nun eine Beispieldatenbank mit dem Namen SQLDevBlogV7 mit Notizen Spalte von VARCHAR(MAX) Typ. Führen Sie dazu das folgende T-SQL-Skript für die Master-Datenbank aus:
-- 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
Volltextkatalog erstellen
Erstellen Sie einen Volltextkatalog mit dem folgenden Skript oder mit dem Einrichtungsassistenten:
-- Create Full-Text Catalog CREATE FULLTEXT CATALOG ArticleCatalog AS DEFAULT; GO
Volltextindex für Notizen definieren
Sobald der Katalog erfolgreich erstellt wurde, definieren Sie einen Volltextindex basierend auf den Notizen Spalte wie folgt (oder mit dem Einrichtungsassistenten):
-- Define Full-Text Index CREATE FULLTEXT INDEX ON dbo.Article(Notes) KEY INDEX PK_Article WITH STOPLIST = SYSTEM; GO
Volltextkatalog und Volltextindexprüfung
Erweitern Sie zugehörige Knoten, um den gerade erstellten Volltextindex und Volltextkatalog anzuzeigen:
Jetzt können Sie Volltextabfragen für die relevante Tabelle ausführen – in unserem Fall ist es Artikel .
Einfacher Begriff
Die Suche nach einem Wort oder einer Phrase ist einfacher als die Suche nach anderen Formen, daher wird es auch als einfacher Begriff bezeichnet.
Weitere Informationen finden Sie unter Implementieren der Volltextsuche in SQL Server 2016 für Anfänger Artikel, um eine grundlegende Form einer Volltextabfrage zu implementieren, um nach einem Wort oder einer Phrase zu suchen.
Lassen Sie uns nun einige der potenziellen erweiterten Suchen besprechen, die mit der Volltextsuche durchgeführt werden.
Erweiterte Volltextsuche mit Präfixbegriff
Ein Präfixbegriff bezieht sich auf ein vorangestelltes Wort, das mit einigen Buchstaben beginnt – es kann dann alles sein, was diesem Muster entspricht. Sie können es sich als Volltextsuche-Version von LIKE vorstellen mit vorangestelltem Wort*.
Ein Wort oder Wörter innerhalb eines Satzes können auch Präfixbegriffe haben.
Beispiel
Suchen Sie beispielsweise nach dem Wort Daten* kann uns alles liefern, beginnend mit Daten in dieser Spalte, wie z. B. Daten, Datenbank, Datenbanken usw.
Entwicklerbezogene Artikelsuche mit Präfixbegriff
Stellen wir uns vor, Sie haben die Aufgabe, nach entwicklungsbezogenen Artikeln zu suchen, um sie in einer separaten Entwicklungsgruppe zu organisieren, um die Anzeige der Website zu verbessern.
Die Lösung ist die „Präfixbegriffssuche“ mit einer Volltextabfrage wie folgt:
--Implementing Prefix Term Full-Text Seach to find dev related articles SELECT Title,Notes FROM dbo.Article WHERE CONTAINS(NOTES,'"dev*"')
Die Ergebnisse zeigte auch der Artikel über DevOps – es ist nicht entwicklungsbezogen, deshalb führen wir ein anderes Skript aus. Es findet alle dev-bezogenen Artikel schneller mit einer Volltextabfrage, mit Ausnahme von DevOps wie folgt:
--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')
Die Ausgabe sieht wie folgt aus:
Beachten Sie auch, dass das Suchwort unbedingt in doppelte Anführungszeichen gesetzt werden muss, wie in den obigen Skripten gezeigt. Dadurch implementieren wir die Suche nach Präfixbegriffen richtig.
Erweiterte Volltextsuche mit Beugungsform
Manchmal müssen Sie nach Flexionsformen eines Wortes suchen, was bedeutet, dass ein Wort mögliche Formen annehmen kann.
Beispiel
Ein einfaches Beispiel ist das Wort „Deploy“, das die folgenden Flexionsformen haben kann:
- Bereitstellung
- Bereitgestellt
- Bereitstellung
- Bereitstellungen
- Bereitstellen
Flexionsformen der Schreibsuche
Sehen wir uns an, was passiert, wenn wir eine Volltextabfrage ausführen, um Notizen für alle Flexionsformen des Wortes write: zu finden
-- Searching inflectional forms of word write using Full-Text Search SELECT Title,Notes FROM dbo.Article WHERE CONTAINS(NOTES,'FORMSOF(INFLECTIONAL,write)')
Die Notizenspalte mit Zeilen, die sowohl write enthalten und schreiben werden dort angezeigt, wo schreiben ist eine Flexionsform von schreiben .
Flexible Formen der Technologiesuche
Wenn Sie die Aufgabe haben, alle Artikel zu finden, die unterschiedliche Formen des Technologieworts enthalten, implementieren Sie mithilfe des folgenden T-SQL-Skripts eine gebeugte Form der Wortsuche:
-- Searching inflectional forms of word technology using Full-Text Search SELECT Title,Notes FROM dbo.Article WHERE CONTAINS(NOTES,'FORMSOF(INFLECTIONAL,technology)')
Die Ausgabe sieht wie folgt aus:
No Prefix Term Unit Search
Lassen Sie uns nun eine komplexere Volltextabfrage erstellen. Es wird nach allen Artikeln gesucht, um eine Flexionsform des Wortes test zu finden aber ohne vorangestellten Begriff Einheit (ohne Unit-Tests), da wir nach Artikeln über Tests suchen, nicht über Unit-Tests:
-- 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*"')
Infolgedessen werden wir nur Datensätze sehen, bei denen manuell , automatisiert, oder nur testen Wörter werden ohne Einheitentests erwähnt Artikel.
Erweiterte Volltextsuche mit Näherungssuche
Lassen Sie uns unsere praktischen Erfahrungen mit der Näherungssuche nutzen, indem wir eine Volltextabfrage ausführen.
Nähe Suche/Begriff
Mit dieser Form der Volltextsuche können Sie nach Wörtern oder Sätzen suchen, die nahe beieinander liegen. Es ist sehr praktisch, Datensätze zu finden, wenn einige Wörter oder Sätze sehr eng beieinander liegen.
Beispiel
Ein gutes Beispiel für eine Umkreissuche ist die Suche nach Datensätzen mit dem Wort Fußball steht neben dem Wort ground um nur Informationen über Fußballplätze zu erhalten.
Suchen Sie mit dem Begriff „Nähe“ nach „erweiterter Nahtest“
Wenn Sie nach allen Artikeln suchen möchten, in denen erweiterte Tests erwähnt werden, ohne eine bestimmte Reihenfolge einzuhalten, verwenden Sie am besten die Näherungssuche, da die Volltextsuche für die gewünschte Spalte eingerichtet ist.
Schreiben Sie das folgende Skript, um nach dem Wort erweitert zu suchen neben dem Wort testen in beliebiger Reihenfolge in der Spalte Notizen:
-- Search for word advanced near word testing using proximity search (Full-Text Search) SELECT NOTES FROM dbo.Article WHERE CONTAINS (NOTES,'NEAR(advanced,testing)')
Die Ergebnisse lauten wie folgt:
Die Ergebnisse zeigten uns die Notizen, in denen das Testen durch fortgeschrittene Methoden erwähnt wird, und genau danach haben wir gesucht. Wir können auch den Abstand zwischen zwei Wörtern angeben.
Suche mit nicht mehr als 2 Wörtern auseinander
Führen Sie abschließend eine Volltextabfrage mit dem Näherungsbegriff aus, um jedes Datenbankszenario herauszufinden, in dem das Wort Datenbank vorkommt steht neben dem Wort Szenario aber nicht mehr als 2 Wörter voneinander entfernt.
-- 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)')
Die Ausgabe sieht wie folgt aus:
Als Ergebnis wurde der Artikel Datenbankentwicklungsszenario erwähnt wurde erfolgreich gezeigt.
Damit haben Sie erfolgreich gelernt, fortgeschrittene Volltextabfragen für beliebige Spalten zu schreiben. Dies hilft Ihnen, anspruchsvolle Suchanforderungen zu erfüllen, um die Volltextsuche wo immer möglich in Ihren Berufslebensszenarien ausführen zu können.
Dinge zu tun
Da Sie jetzt fortgeschrittene Volltextabfragen schreiben können, sollten Sie Folgendes versuchen, um Ihre Fähigkeiten zu verbessern:
- Versuchen Sie, nach allen Artikeln zu suchen, denen das Wort auto vorangestellt ist verwendet wird.
- Denken Sie an diesen Artikel und versuchen Sie, ein Skript zu schreiben, um eine Umgebungssuche durchzuführen, um alle Zeilen zu finden, in denen das Wort modern vorkommt steht neben dem Wort Tools .
- Versuchen Sie, alle Flexionsformen des Wortes schrieb zu finden .