Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Opanowanie wykorzystania list stop z wyszukiwaniem pełnotekstowym serwera SQL Server (FTS)

Tworzenie i zarządzanie listami stop jest jednym z głównych komponentów odpowiedzialnych za poprawę wydajności wyszukiwania pełnotekstowego przy jednoczesnym zmniejszeniu rozmiaru indeksu. Ten artykuł ma na celu pomóc Ci dogłębnie opanować pracę i wdrożyć wiele strategii tworzenia stoplist na prostych, ale interesujących przykładach.

Podkreślimy również znaczenie różnych metod generowania stoplist i wyjaśnimy, jak wybrać najbardziej odpowiednią metodę.

Dlaczego opanowywanie list stop

Kiedy mówimy o używaniu stoplist dotyczących wyszukiwania pełnotekstowego, pierwszym pytaniem jest, dlaczego tak wiele się uczymy o tych stoplistach. Odpowiedź tkwi zarówno w oczywistych, jak i ukrytych zaletach używania stoplistów z wyszukiwaniem pełnotekstowym. Istnieją również długoterminowe korzyści, które mogą przynieść po pomyślnym wdrożeniu.

Znaczenie list stop

Stoplista to specyficzny dla języka składnik wyszukiwania pełnotekstowego zawierający zdefiniowane przez użytkownika lub dostarczone przez system słowa stop. Musi wykluczyć takie słowa, aby stały się częścią wyszukiwania pełnotekstowego.

Projekt wyszukiwania pełnotekstowego bez listy stop nie jest optymalnym wykorzystaniem komponentów specyficznych dla języka, które powinny poprawić wydajność wyszukiwania pełnotekstowego i czas odpowiedzi.

Wymagania wstępne

  1. Możesz pisać i uruchamiać skrypty T-SQL.
  2. Wyszukiwanie pełnotekstowe musi być zainstalowane w twojej instancji SQL Server.
  3. Znasz podstawowe koncepcje i implementację wyszukiwania pełnotekstowego.
  4. Masz podstawową wiedzę na temat stopwords i stoplist.

W przypadku braku informacji zapewniających spełnienie powyższych wymagań, zapoznaj się z poniższymi artykułami:

  • Implementacja wyszukiwania pełnotekstowego w SQL Server 2016 dla początkujących
  • Implementacja wyszukiwania pełnotekstowego w SQL Server 2016 dla zaawansowanych użytkowników
  • Jak używać Stopwords i Stoplist do ulepszania wyszukiwania pełnotekstowego serwera SQL Server (FTS)

Wiele strategii tworzenia listy stop

Istnieje wiele różnych metod lub strategii, ale niektóre z nich są znacznie lepsze od innych. Każdy programista baz danych z umiejętnościami implementacji wyszukiwania pełnotekstowego powinien znać wszystkie metody, aby w razie potrzeby wybrać najlepszą.

Najskuteczniejszym sposobem zrozumienia tych różnych strategii jest zastosowanie ich w przykładowej bazie danych.

Konfiguruj przykładową bazę danych

Pierwszym krokiem jest skonfigurowanie bazy danych do uruchamiania zapytań pełnotekstowych. Utwórz przykładową bazę danych o nazwie WatchReviewsMasterStoplist :

-- Create WatchReviewsMasterStoplist database
CREATE DATABASE WatchReviewsMasterStoplist;
GO

-- Connect to the sample database
USE WatchReviewsMasterStoplist

-- (2) Create WatchReview table
CREATE TABLE [dbo].[WatchReview]
(
	[ReviewId] INT NOT NULL IDENTITY , 
    [Date] DATETIME2 NULL, 
    [Person] VARCHAR(50) NULL, 
    [Details] VARCHAR(1000) NULL, 
    CONSTRAINT [PK_WatchReview] PRIMARY KEY (ReviewId)
)

-- (3) Populate WatchReview table
SET IDENTITY_INSERT [dbo].[WatchReview] ON
INSERT INTO [dbo].[WatchReview] ([ReviewId], [Date], [Person], [Details]) VALUES (1, N'2020-06-01 00:00:00', N'Asif', N'Hi, I have just bought this Casio black digital watch which is excellent and has date, alarm, stopwatch and timer as well.')
INSERT INTO [dbo].[WatchReview] ([ReviewId], [Date], [Person], [Details]) VALUES (2, N'2020-07-02 00:00:00', N'Asim', N'Hi, I have just bought this Casio black analog watch which is average and slightly discomforting and just got date and time.')
INSERT INTO [dbo].[WatchReview] ([ReviewId], [Date], [Person], [Details]) VALUES (3, N'2020-08-03 00:00:00', N'Martin', N'Hi, I have just purchased this Casio black digital watch which is excellent and has features like an alarm, stopwatch, date, and timer. ')
INSERT INTO [dbo].[WatchReview] ([ReviewId], [Date], [Person], [Details]) VALUES (4, N'2020-09-10 00:00:00', N'Brian ', N'Hi, I have just ordered this Seiko black digital watch which is excellent and has date, alarm and timer.')
INSERT INTO [dbo].[WatchReview] ([ReviewId], [Date], [Person], [Details]) VALUES (5, N'2020-10-11 00:00:00', N'Peter', N'Hi, I have just ordered this Seiko white analog watch which is average and has alarm, date and timer.')
SET IDENTITY_INSERT [dbo].[WatchReview] OFF

Omówienie strategii wielu stoplist

Możesz użyć następujących trzech sposobów/strategii, aby utworzyć listę stop i zapobiec temu, by słowa zakłócające stały się częścią zapytań wyszukiwania pełnotekstowego:

  1. Utwórz niestandardową listę stop
  2. Utwórz systemową listę stop
  3. Utwórz listę postojów z niestandardowej (lub systemowej) listy postojów

Wymagania wstępne dotyczące listy stop

Pamiętaj, że zanim utworzysz stoplistę, musisz wykonać następujące czynności:

  1. Utwórz unikalny indeks w jednej z kolumn tabeli, jeśli nie ma dostępnej kolumny klucza (klucz podstawowy).
  2. Utwórz katalog pełnotekstowy.
  3. Utwórz indeks pełnotekstowy.

Utwórz niestandardową listę stop

Załóżmy, że dostępna jest unikatowa kolumna indeksu lub klucza podstawowego (jak w naszej przykładowej bazie danych). Tworzymy niestandardową listę stop w następujący sposób:

  1. Utwórz katalog pełnotekstowy.
  2. Utwórz pustą niestandardową listę stop.
  3. Utwórz indeks pełnotekstowy z niestandardową listą zatrzymania utworzoną w kroku 2.

Aby uzyskać szczegółowe informacje, zapoznaj się z artykułem Jak używać odrzucanych słów i listy stop do ulepszania wyszukiwania pełnotekstowego serwera SQL Server (FTS)

Wady i zalety niestandardowych list stop

Największą zaletą tworzenia niestandardowej listy stop jest to, że możesz mieć nad nią pełną kontrolę i śledzić ją, dodając i usuwając słowa, które uważasz za słowa zakłócające.

Stosowanie tego podejścia ma jednak pewne wady. Stoplista jest bardzo ograniczona i nie będzie zawierała zalecanych przez system słów zatrzymania, aby jeszcze bardziej poprawić wydajność zapytań pełnotekstowych.

Tworzenie systemowej listy stop

Utwórz listę zatrzymania systemu (jeśli podano kolumnę klucza podstawowego lub unikalny indeks) w następujący sposób:

  1. Utwórz katalog pełnotekstowy.
  2. Utwórz indeks pełnotekstowy z listą zatrzymania systemu.

Przygotowujemy się do korzystania z systemowej listy stop, najpierw tworząc katalog pełnotekstowy:

-- Create Full-Text catalog
CREATE FULLTEXT CATALOG [WatchReviewCatalog] AS DEFAULT;
GO

Utwórz indeks pełnotekstowy w kolumnie recenzji (Szczegóły) tabeli WatchReview z listą zatrzymania systemu. Użyj następującego skryptu T-SQL:

-- Create Full-Text index with System Stoplist
CREATE FULLTEXT INDEX ON dbo.WatchReview(Details LANGUAGE [British English]) 
   KEY INDEX PK_WatchReview  
   WITH STOPLIST = System;  
GO  

Wyświetl listę zatrzymania systemu w języku angielskim

Możesz wyświetlić listę stopwords zawartych na stopliście systemowej brytyjskiego angielskiego. Uruchom następujące zapytanie SQL:

-- View system stoplist of English language
SELECT name,stopword FROM sys.fulltext_system_stopwords sw
INNER JOIN sys.fulltext_languages fl
on sw.language_id=fl.lcid
where name='British English'

Dane wyjściowe są następujące:

Wyświetl 3 najlepsze najnowsze recenzje

Uruchom szybkie sprawdzenie nowo utworzonej przykładowej bazy danych. Zrób to, zdobywając 3 najlepsze najnowsze recenzje zegarków z WatchReview tabela:

-- Top 3 most recent watch reviews 
SELECT TOP 3 wr.Person,FORMAT(wr.Date,'dd-MMM-yyyy') as ReviewDate,wr.Details FROM dbo.WatchReview wr
ORDER BY wr.Date DESC

Dane wyjściowe są następujące:

Sprawdzanie odrzucanych słów przez uruchamianie zapytań pełnotekstowych

Możemy uruchamiać zapytania pełnotekstowe względem wyznaczonej tabeli. Nie zdziw się, jeśli wiele słów zakłócających (zawartych w systemowej liście stop w celu poprawy wydajności) nie pojawi się w zapytaniach pełnotekstowych. Oznacza to, że nasza lista stop systemowych wykonuje swoją pracę poprawnie.

Jak widzimy, słowo „to” jest obecny w 3 najlepszych recenzjach. Jest to jednak słowo-hałas rozpoznawany przez systemową listę stop.

Sprawdźmy, czy wyszukiwanie pełnotekstowe zwraca słowo szumu „to” zawarte na liście stop systemowych:

--Run Full-Text query to Search for Noise word 'this' 
SELECT * FROM dbo.WatchReview
WHERE CONTAINS(Details,'this')

Zestaw wyników znajduje się poniżej:

Teraz możemy uruchomić zapytanie pełnotekstowe, aby wyszukać słowo „jest” co jest kolejnym hałaśliwym słowem:

--Run Full-Text query to Search for Noise word 'is' 
SELECT * FROM dbo.WatchReview
WHERE CONTAINS(Details,'is')

Wynik zapytania znajduje się poniżej:

Widzimy, że słowo „jest” został również skutecznie zabezpieczony przed włączeniem się do wyniku zapytania pełnotekstowego, oszczędzając cenne zasoby.

Pełnotekstowe zapytanie do wyszukania słowa „Cześć”

Uruchamiamy zapytanie pełnotekstowe, aby wyszukać słowo „Cześć”. Nie jest częścią listy stoperów systemu. Dlatego zapytanie musi go zwrócić.

--Search Noise word 'Hi' 
SELECT * FROM dbo.WatchReview
WHERE CONTAINS(Details,'Hi')

Dane wyjściowe są następujące:

Mamy wszystkie rekordy zawierające słowo „Cześć”. Chcielibyśmy jednak to wykluczyć, ponieważ jest to słowo hałaśliwe. Jeśli użyjemy wyszukiwania pełnotekstowego w naszej analizie tekstowej, to słowo może odwrócić naszą uwagę od celu.

To prowadzi nas do trzeciej metody:tworzenia stoplisty z niestandardowej lub systemowej listy stop.

Tworzenie niestandardowej listy zatrzymania z systemowej listy zatrzymania

Utwórz niestandardową listę stop o nazwie WatchMasterStoplist z listy stop systemu za pomocą następującego skryptu T-SQL:

--Creating a custom stoplist WatchMasterStoplist from system stoplist 
CREATE FULLTEXT STOPLIST [WatchMasterStoplist] FROM SYSTEM STOPLIST;
GO

Powiązanie nowej niestandardowej listy stop z indeksem pełnotekstowym

Powiąż nowo utworzoną niestandardową listę stop z indeksem pełnotekstowym w następujący sposób:

USE [WatchReviewsMasterStoplist]
GO
-- Associating new custom stoplist with Full-Text index
ALTER FULLTEXT INDEX ON [dbo].[WatchReview] SET STOPLIST = [WatchMasterStoplist]

Sprawdzanie niestandardowej listy stop poprzez wyszukiwanie słowa „to”

Możesz szybko sprawdzić, czy Twoja niestandardowa stoplista zawiera wszystkie słowa dźwiękowe z systemowej listy stop. Uruchom ten sam kod, którego użyliśmy wcześniej, aby wyszukać słowo „to”.

--Run Full-Text query to Search for Noise word 'this' 
SELECT * FROM dbo.WatchReview
WHERE CONTAINS(Details,'this')

To wyjście musi być puste.

Dodawanie nowego słowa dźwiękowego „Hi” do niestandardowej listy stop

Musimy dodać słowo szumu „Cześć” do nowo utworzonej niestandardowej listy stop. Uruchom następujący skrypt:

--Alter customer stoplist to add Hi noise word
ALTER FULLTEXT STOPLIST WatchMasterStoplist
ADD 'Hi' LANGUAGE 'British English';  

Zestaw wyników znajduje się poniżej:

Ostateczna kontrola

Teraz uruchomimy ostateczną kontrolę zapytania pełnotekstowego dla niektórych słów-szumów – porównujemy je z oryginalnym zestawem wyników zawierającym te słowa-szum.

Na przykład, jeśli skupimy się na czwartej recenzji (uporządkowanej według ReviewId ), która zawiera kilka słów-szumów, a następnie porównaj wyniki z wynikami zapytania pełnotekstowego, nie powinniśmy widzieć żadnych słów-szumów.

Uruchom następujący skrypt, aby przeprowadzić ostateczną kontrolę w przykładowej bazie danych:

USE WatchReviewsMasterStoplist

-- View the record which contains fourth review 
SELECT ReviewId
      ,[Date]
      ,Person
      ,Details
  FROM dbo.WatchReview
  where ReviewId=4

--Run Full-Text	query to Search for Noise words in the fourth review
SELECT * FROM dbo.WatchReview
WHERE CONTAINS(Details,'"Hi" OR "this" OR "I" OR "is" OR "and"')
and ReviewId=4

Dane wyjściowe są następujące:

Pełnotekstowe zapytanie do wyszukania recenzji zegarków cyfrowych

Teraz możemy uruchamiać nasze zapytania wyszukiwania pełnotekstowego z włączoną listą stop. Poniższy skrypt T-SQL poinformuje nas o recenzjach zegarków cyfrowych (przykład):

USE WatchReviewsMasterStoplist

--Run Full-Text query to Search for digital watch reviews sample
SELECT * FROM dbo.WatchReview WHERE CONTAINS(Details,'digital')

Wyniki są poniżej:

Gratulacje! Z powodzeniem wdrożyliśmy wszystkie trzy metody tworzenia i kojarzenia stoplist. Zbadaliśmy również dodawanie nowych słów do stoplist i sprawdzanie wydajności.

Mimo to zdecydowanie polecam trzecią metodę. Utwórz niestandardową listę zatrzymań z systemowej listy zatrzymania, a następnie dodaj słowa dźwiękowe, aby ulepszyć wyszukiwanie pełnotekstowe.

Rzeczy do zrobienia

Teraz, gdy znasz już trzy metody tworzenia stoplistów, możesz wykonać kilka ćwiczeń, aby poprawić swoje umiejętności analizy tekstu, takie jak:

  1. Dodaj niestandardową listę zatrzymania z systemowej listy zatrzymania względem przykładowej bazy danych, jak w tym artykule.
  2. Utwórz niestandardową listę zatrzymania z systemowej listy zatrzymania względem przykładowej bazy danych, jak w tym artykule.
  3. Uruchom zapytanie T-SQL, aby zobaczyć dodane odrzucane słowa po zapoznaniu się z tym artykułem.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Uzyskaj informacje o widoku za pomocą widoku schematu informacji WIDOKÓW w SQL Server

  2. Kiedy powinienem używać zmiennej tabeli a tabeli tymczasowej w serwerze sql?

  3. Zaplanowane uruchomienie procedury składowanej na serwerze SQL

  4. Jak utworzyć śledzenie SQL w celu przechwytywania zdarzeń serwera SQL

  5. Jak mogę rozwiązać problem z pulą połączeń między ASP.NET i SQL Server?