Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Thành thạo việc sử dụng danh sách dừng với tìm kiếm toàn văn bản trên SQL Server (FTS)

Tạo và quản lý danh sách dừng đóng vai trò là một trong những thành phần chính chịu trách nhiệm cải thiện hiệu suất Tìm kiếm toàn văn bản cùng với việc giảm kích thước của chỉ mục. Bài viết này nhằm giúp bạn làm chủ công việc một cách chuyên sâu và thực hiện nhiều chiến lược để tạo danh sách dừng trên các ví dụ đơn giản nhưng thú vị.

Chúng tôi cũng sẽ nêu bật tầm quan trọng của các phương pháp khác nhau để tạo danh sách dừng và làm rõ cách chọn phương pháp phù hợp nhất.

Tại sao nên làm chủ danh sách dừng

Khi chúng ta nói về việc sử dụng danh sách dừng liên quan đến Tìm kiếm toàn văn, câu hỏi đầu tiên là tại sao chúng ta lại tìm hiểu nhiều về những danh sách dừng này. Câu trả lời nằm ở cả lợi ích rõ ràng và tiềm ẩn của việc sử dụng danh sách dừng với Tìm kiếm toàn văn bản. Ngoài ra còn có những lợi ích lâu dài mà chúng có thể mang lại sau khi triển khai thành công.

Tầm quan trọng của danh sách dừng

Danh sách dừng là một thành phần dành riêng cho ngôn ngữ của Tìm kiếm toàn văn bản chứa các từ dừng do người dùng xác định hoặc do hệ thống cung cấp. Nó phải loại trừ những từ như vậy trở thành một phần của Tìm kiếm toàn văn bản.

Thiết kế Tìm kiếm toàn văn bản không có danh sách dừng không phải là cách sử dụng tối ưu các thành phần dành riêng cho ngôn ngữ để cải thiện hiệu quả và thời gian phản hồi của Tìm kiếm toàn văn bản.

Điều kiện tiên quyết

  1. Bạn có thể viết và chạy các tập lệnh T-SQL.
  2. Tìm kiếm toàn văn bản phải được cài đặt vào phiên bản SQL Server của bạn.
  3. Bạn đã quen với các khái niệm và cách triển khai Tìm kiếm toàn văn bản cơ bản.
  4. Bạn có kiến ​​thức cơ bản về từ dừng và danh sách dừng.

Trong trường hợp bạn thiếu thông tin để đảm bảo các yêu cầu trên, hãy tham khảo các bài viết dưới đây:

  • Triển khai Tìm kiếm Toàn văn trong SQL Server 2016 cho người mới bắt đầu
  • Triển khai Tìm kiếm Toàn văn trong SQL Server 2016 cho Người dùng Nâng cao
  • Cách sử dụng Từ dừng và Danh sách dừng để cải thiện Tìm kiếm toàn văn bản (FTS) của SQL Server

Nhiều chiến lược tạo danh sách dừng

Có nhiều phương pháp hoặc chiến lược khác nhau, nhưng một số trong số chúng tốt hơn nhiều so với những phương pháp khác. Bất kỳ nhà phát triển cơ sở dữ liệu nào có kỹ năng triển khai Tìm kiếm toàn văn bản đều phải quen thuộc với tất cả các phương pháp để chọn phương pháp tốt nhất khi được yêu cầu.

Cách hiệu quả nhất để hiểu các chiến lược khác nhau này là áp dụng chúng dựa trên cơ sở dữ liệu mẫu.

Thiết lập cơ sở dữ liệu mẫu

Bước đầu tiên là thiết lập cơ sở dữ liệu để chạy các truy vấn Toàn văn. Tạo cơ sở dữ liệu mẫu có tên 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

Tổng quan về nhiều chiến lược danh sách dừng

Bạn có thể sử dụng ba cách / chiến lược sau để tạo danh sách dừng và ngăn các từ nhiễu trở thành một phần của các truy vấn Tìm kiếm toàn văn của bạn:

  1. Tạo danh sách dừng tùy chỉnh
  2. Tạo danh sách dừng hệ thống
  3. Tạo danh sách dừng từ danh sách dừng tùy chỉnh (hoặc hệ thống)

Điều kiện tiên quyết về danh sách dừng

Hãy nhớ rằng trước khi tạo danh sách dừng, bạn phải thực hiện những việc sau:

  1. Tạo một chỉ mục duy nhất trên một trong các cột của bảng nếu không có sẵn cột chính (Khóa chính).
  2. Tạo Danh mục Toàn văn.
  3. Tạo Chỉ mục Toàn văn.

Tạo danh sách dừng tùy chỉnh

Giả sử rằng chỉ mục duy nhất hoặc cột khóa chính có sẵn (như trong cơ sở dữ liệu mẫu của chúng tôi). Chúng tôi tạo một danh sách dừng tùy chỉnh như sau:

  1. Tạo Danh mục Toàn văn.
  2. Tạo một danh sách dừng tùy chỉnh trống.
  3. Tạo Chỉ mục toàn văn bản với danh sách dừng tùy chỉnh đã tạo ở bước 2.

Để biết thông tin chi tiết, hãy tham khảo bài viết Cách sử dụng Từ dừng và Danh sách dừng để cải thiện Tìm kiếm toàn văn bản (FTS) của SQL Server

Ưu và nhược điểm của Danh sách dừng tùy chỉnh

Ưu điểm lớn nhất của việc tạo danh sách dừng tùy chỉnh là bạn có thể có toàn quyền kiểm soát và theo dõi nó bằng cách thêm và xóa các từ mà bạn cho là từ nhiễu.

Tuy nhiên, có một nhược điểm khi sử dụng phương pháp này. Danh sách dừng rất hạn chế và nó sẽ không bao gồm các từ dừng do hệ thống đề xuất để cải thiện hơn nữa hiệu suất truy vấn Toàn văn.

Tạo danh sách dừng hệ thống

Tạo danh sách dừng hệ thống (nếu cột khóa chính hoặc chỉ mục duy nhất được cung cấp) như sau:

  1. Tạo Danh mục Toàn văn.
  2. Tạo Chỉ mục toàn văn bản bằng danh sách dừng của hệ thống.

Chúng tôi chuẩn bị sử dụng danh sách dừng hệ thống bằng cách tạo Danh mục toàn văn trước:

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

Tạo Chỉ mục toàn văn bản trên cột đánh giá (Chi tiết) của bảng WatchReview với danh sách dừng hệ thống. Sử dụng tập lệnh T-SQL sau:

-- 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  

Xem danh sách dừng hệ thống ngôn ngữ tiếng Anh

Bạn có thể xem danh sách các từ dừng có trong danh sách dừng hệ thống của Anh ngữ Anh. Chạy truy vấn SQL sau:

-- 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'

Kết quả như sau:

Xem 3 bài đánh giá gần đây nhất

Chạy kiểm tra nhanh cơ sở dữ liệu mẫu mới được tạo. Làm điều đó bằng cách nhận 3 bài đánh giá đồng hồ hàng đầu gần đây nhất từ ​​ WatchReview bảng:

-- 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

Kết quả như sau:

Kiểm tra Từ dừng bằng cách chạy truy vấn Toàn văn

Chúng tôi có thể chạy các truy vấn Toàn văn đối với bảng được chỉ định. Đừng ngạc nhiên nếu nhiều từ nhiễu (được đưa vào danh sách dừng của hệ thống để cải thiện hiệu suất) không hiển thị trong các truy vấn Toàn văn. Điều đó có nghĩa là danh sách dừng hệ thống của chúng tôi đang thực hiện đúng công việc của nó.

Như chúng ta có thể thấy, từ ‘this’ có mặt trong 3 bài đánh giá hàng đầu. Tuy nhiên, bản thân nó là một từ nhiễu được danh sách dừng hệ thống nhận ra.

Hãy để chúng tôi kiểm tra xem Tìm kiếm toàn văn bản có trả lại từ nhiễu ‘this’ không được đưa vào danh sách dừng hệ thống:

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

Tập hợp kết quả dưới đây:

Bây giờ chúng ta có thể chạy truy vấn Toàn văn để tìm kiếm từ ‘is’ là một từ nhiễu khác:

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

Kết quả truy vấn dưới đây:

Chúng ta có thể thấy rằng từ ‘ is’ cũng đã được ngăn chặn thành công khỏi việc trở thành một phần của kết quả truy vấn Toàn văn bản bằng cách tiết kiệm các tài nguyên có giá trị.

Truy vấn toàn văn bản để tìm kiếm từ 'Xin chào'

Chúng tôi chạy truy vấn Toàn văn để tìm kiếm từ ‘Xin chào.’ Nó không phải là một phần của danh sách dừng hệ thống. Do đó, truy vấn phải trả về nó.

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

Kết quả như sau:

Chúng tôi nhận được tất cả các bản ghi có chứa từ ‘Xin chào.’ Tuy nhiên, chúng tôi muốn loại trừ nó, vì nó là một từ nhiễu. Nếu chúng tôi sử dụng Tìm kiếm toàn văn bản trong phân tích văn bản của mình, từ này có thể khiến chúng tôi mất tập trung vào mục tiêu.

Điều này dẫn chúng ta đến phương pháp thứ ba:tạo danh sách dừng từ danh sách dừng tùy chỉnh hoặc hệ thống.

Tạo danh sách dừng tùy chỉnh từ danh sách dừng hệ thống

Tạo danh sách dừng tùy chỉnh có tên WatchMasterStoplist từ danh sách dừng hệ thống với tập lệnh T-SQL sau:

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

Liên kết Danh sách dừng tùy chỉnh mới với chỉ mục Toàn văn

Liên kết danh sách dừng tùy chỉnh mới được tạo với chỉ mục Toàn văn như sau:

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

Kiểm tra danh sách dừng tùy chỉnh bằng cách Tìm kiếm từ ‘this’

Bạn có thể nhanh chóng kiểm tra xem danh sách dừng tùy chỉnh của mình có bao gồm tất cả các từ nhiễu từ danh sách dừng của hệ thống hay không. Chạy cùng một mã mà chúng tôi đã sử dụng trước đó để tìm kiếm từ ‘this.’

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

Đầu ra này phải để trống.

Thêm một từ nhiễu mới "Xin chào" vào Danh sách dừng tùy chỉnh

Chúng tôi cần thêm từ nhiễu ‘Xin chào’ vào danh sách dừng tùy chỉnh mới được tạo. Chạy tập lệnh sau:

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

Tập hợp kết quả dưới đây:

Kiểm tra lần cuối

Bây giờ, chúng tôi sẽ chạy kiểm tra truy vấn Toàn văn cuối cùng để tìm một số từ nhiễu - chúng tôi so sánh nó với tập kết quả ban đầu chứa các từ nhiễu đó.

Ví dụ:nếu chúng tôi tập trung vào bài đánh giá thứ tư (được sắp xếp theo ReviewId ), có chứa một số từ nhiễu và sau đó so sánh kết quả với kết quả truy vấn Toàn văn bản, chúng ta sẽ thấy không có từ nhiễu nào.

Chạy tập lệnh sau để tiến hành kiểm tra lần cuối đối với cơ sở dữ liệu mẫu:

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

Kết quả như sau:

Truy vấn toàn văn bản để tìm kiếm các bài đánh giá về đồng hồ kỹ thuật số

Giờ đây, chúng tôi có thể chạy các truy vấn Tìm kiếm Toàn văn của mình với danh sách dừng tại chỗ. Tập lệnh T-SQL sau sẽ thông báo cho chúng tôi về các bài đánh giá đồng hồ kỹ thuật số (mẫu):

USE WatchReviewsMasterStoplist

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

Kết quả như sau:

Xin chúc mừng! Chúng tôi đã thực hiện thành công cả ba phương pháp tạo và liên kết danh sách dừng. Chúng tôi cũng đã kiểm tra việc thêm các từ mới vào danh sách dừng và kiểm tra hiệu suất.

Tuy nhiên, tôi thực sự khuyên bạn nên sử dụng phương pháp thứ ba. Tạo danh sách dừng tùy chỉnh từ danh sách dừng hệ thống, sau đó thêm các từ nhiễu để cải thiện Tìm kiếm toàn văn bản của bạn.

Việc cần làm

Bây giờ bạn đã biết rõ về ba phương pháp tạo danh sách dừng, bạn có thể thực hiện một số bài tập để cải thiện kỹ năng phân tích văn bản của mình, như sau:

  1. Thêm danh sách dừng tùy chỉnh từ danh sách dừng của hệ thống dựa trên cơ sở dữ liệu mẫu, như trong bài viết này.
  2. Tạo danh sách dừng tùy chỉnh từ danh sách dừng của hệ thống dựa trên cơ sở dữ liệu mẫu, như trong bài viết này.
  3. Chạy truy vấn T-SQL để xem các từ dừng đã thêm sau khi làm quen với bài viết này.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách xóa cột trong SQL Server bằng T-SQL

  2. Làm cách nào để bạn sao chép bản ghi trong bảng SQL nhưng hoán đổi id duy nhất của hàng mới?

  3. Những điều bạn nên biết với NOCHECK khi kích hoạt ràng buộc CHECK trong SQL Server

  4. Cách tắt tính năng thu thập dữ liệu thay đổi (CDC) trên cơ sở dữ liệu trong SQL Server - Hướng dẫn sử dụng SQL Server

  5. Cách thêm tệp dữ liệu vào cơ sở dữ liệu máy chủ SQL (T-SQL)