Các từ dừng tìm kiếm toàn văn mysql

Bài viết hiện tại là về Từ dừng và cách sử dụng Danh sách dừng. Mục đích là làm cho Tìm kiếm Toàn văn hiệu quả hơn về mặt lưu trữ và hiệu suất. Ngoài ra, độc giả của bài viết này sẽ được hướng dẫn triển khai Tìm kiếm toàn văn bản với Từ dừng và Danh sách dừng

Bài báo cũng nhấn mạnh tầm quan trọng của Từ dừng và [các] Danh sách dừng để giữ cho Tìm kiếm Toàn văn được chính xác và tránh các từ nhiễu

Hiểu về Stopwords và Stoplist

Đầu tiên, hãy làm rõ bản chất của Stopwords và Stoplist. Sau đó, chúng tôi sẽ tiến hành sử dụng chúng để cải thiện Tìm kiếm Toàn văn

Danh sách dừng

Danh sách dừng, như tên ngụ ý, là một danh sách các từ dừng. Khi được liên kết với Tìm kiếm Toàn văn, Danh sách dừng có thể lọc ra các từ hoặc thuật ngữ vô nghĩa, do đó cải thiện kết quả tìm kiếm

một từ dừng

Từ dừng là từ có vai trò phụ trong Tìm kiếm toàn văn bản, mặc dù quan trọng về mặt ngữ pháp. Do đó, từ dừng không cần thiết từ phối cảnh Tìm kiếm Toàn văn

Theo tài liệu của Microsoft, một từ dừng có thể là một từ có nghĩa nào đó trong một ngôn ngữ cụ thể hoặc có thể là một mã thông báo nào đó không có giá trị ngôn ngữ. Trong cả hai trường hợp, việc Tìm kiếm Toàn văn là vô ích

Ví dụ về từ dừng

Sau đây là các từ dừng trong ngôn ngữ tiếng Anh [Anh/Mỹ]

  • như
  • tại
  • thì là ở
  • tại vì
  • anh ta
  • đã làm

Vì các từ trên không góp phần vào Tìm kiếm Toàn văn, nên chúng là các từ dừng, mặc dù ý nghĩa của chúng trong việc hiểu một câu hoàn chỉnh

[Các] Danh sách dừng hệ thống

Mỗi ngôn ngữ được hỗ trợ, bao gồm cả tiếng Anh Anh, có một danh sách dừng mặc định hoặc hệ thống có thể được sửa đổi theo các yêu cầu cụ thể

[Các] Danh sách dừng tùy chỉnh

Người dùng có thể tạo danh sách dừng tùy chỉnh/của riêng họ, sử dụng danh sách dừng của hệ thống hoặc từ đầu. Sẽ rất hữu ích nếu ngăn các từ nhiễu trở thành một phần của kết quả Tìm kiếm toàn văn bản

Ngôn ngữ và danh sách dừng

Tìm kiếm toàn văn hỗ trợ nhiều ngôn ngữ khác nhau. Theo mặc định, mỗi ngôn ngữ được hỗ trợ đều có ít nhất một danh sách dừng hệ thống. Tuy nhiên, có thể có nhiều danh sách dừng cho bất kỳ ngôn ngữ nào, bao gồm cả danh sách dừng hệ thống và tùy chỉnh

Danh sách các ngôn ngữ được hỗ trợ

Chúng tôi có thể nhanh chóng kiểm tra danh sách tất cả các ngôn ngữ được hỗ trợ được sử dụng với Tìm kiếm toàn văn bản. Đối với điều này, hãy chạy tập lệnh T-SQL sau

-- List of Full-Text Search supported languages
SELECT ftl.lcid,ftl.name FROM sys.fulltext_languages ftl

Kết quả như sau

Truy vấn trên phiên bản SQL Server 2016 trả về tổng cộng 53 ngôn ngữ

Sử dụng Stopwords và Stoplist với Full-Text Search

Bây giờ, chúng ta sẽ có một số trải nghiệm thực tế về cách tạo danh sách dừng các từ dừng do người dùng xác định. Sau đó, chúng tôi sẽ sử dụng nó cho Tìm kiếm toàn văn bản dưới dạng hướng dẫn. Nó sẽ giống như một kịch bản thời gian thực

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

Trước hết, bạn cần đảm bảo các yêu cầu sau để thực hiện đúng hướng dẫn

  • Có hiểu biết cơ bản về Full-Text Search
  • Khả năng triển khai Tìm kiếm Toàn văn trong SQL Server
  • Sự hiện diện của tùy chọn Tìm kiếm Toàn văn được bật/cài đặt trên phiên bản SQL mà bạn định sử dụng

Để đảm bảo những điều kiện tiên quyết đó, hãy xem qua các bài viết bên dưới nếu bạn đã quen thuộc với tập lệnh T-SQL

  • 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

Kiểm tra trạng thái Tìm kiếm Toàn văn

Chạy truy vấn sau để kiểm tra xem bạn đã cài đặt Tìm kiếm toàn văn bản vào phiên bản SQL chưa

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

Kết quả của đoạn script trên sẽ trả về 1 như sau

Nếu bạn nhận được bất kỳ số nào khác 1, hãy tham khảo lại các bài viết được đề cập ở trên

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

Trước tiên, bạn cần thiết lập cơ sở dữ liệu mẫu có tên WatchReviewsStoplist. Sử dụng tập lệnh dưới đây

-- Create WatchReviewsStoplist database
CREATE DATABASE WatchReviewsStoplist;
GO

-- Connect to the sample database
USE WatchReviewsStoplist

-- [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-01-01 00:00:00', N'Atif', 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-01-02 00:00:00', N'Qasim', 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-01-03 00:00:00', N'Martin', N'Hi, I have just purchased this Casio black digital watch which is excellent and has features like alarm, stopwatch, date and timer. ']
INSERT INTO [dbo].[WatchReview] [[ReviewId], [Date], [Person], [Details]] VALUES [4, N'2020-01-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-01-11 00:00:00', N'Sarah', 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

Kiểm tra cơ sở dữ liệu mẫu

Chạy tập lệnh T-SQL sau để xem nội dung bảng trong cơ sở dữ liệu mẫu

-- Check sample database
SELECT wr.ReviewId,wr.Person,wr.Details FROM dbo.WatchReview wr

Đầu ra như sau

Kịch bản danh sách dừng

Giả sử rằng chúng tôi đã yêu cầu nhóm phát triển cải thiện Tìm kiếm toàn văn cho các bài đánh giá của khách hàng. Họ nên làm điều đó bằng cách loại trừ các từ ồn ào. Bằng cách này, Tìm kiếm Toàn văn vẫn hiệu quả và tập trung

Để đáp ứng các yêu cầu này, trước tiên chúng ta cần thiết lập Tìm kiếm Toàn văn. Nó có nghĩa là thực hiện các hành động sau

  • Tạo một danh mục toàn văn
  • Tạo một Danh sách dừng trống tùy chỉnh hoặc do người dùng xác định
  • Tạo chỉ mục toàn văn

Tạo danh mục toàn văn

Tạo một danh mục toàn văn với tập lệnh sau

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

Tạo một Danh sách dừng tùy chỉnh trống

Tạo một danh sách dừng tùy chỉnh trống với tập lệnh sau

-- Create empty custom stoplist
CREATE FULLTEXT STOPLIST [WatchReviewStoplist];
GO  

Danh sách dừng tùy chỉnh hiện đã được tạo

Tạo chỉ mục toàn văn

Cuối cùng, tạo Chỉ mục toàn văn trong cột Chi tiết cho ngôn ngữ tiếng Anh Anh. Nó sẽ trỏ đến danh sách dừng tùy chỉnh được tạo trước đó. Sử dụng tập lệnh T-SQL sau cho hành động này

-- Create Full-Text index pointing to the previously created Stoplist
CREATE FULLTEXT INDEX ON dbo.WatchReview[Details LANGUAGE [British English]] 
   KEY INDEX PK_WatchReview  
   WITH STOPLIST = WatchReviewStoplist;  
GO  

Truy vấn toàn văn để khách hàng đánh giá đồng hồ xuất sắc

Chạy truy vấn Toàn văn sau đây để tìm ra sản phẩm [đồng hồ] nào được khách hàng đánh giá xuất sắc

--Search customer reviews where the product was rated excellent
SELECT * FROM dbo.WatchReview
WHERE CONTAINS[Details,'excellent'] 

Kết quả dưới đây

Chúng ta có thể thấy rằng khách hàng đã xếp hạng xuất sắc cho đồng hồ kỹ thuật số màu đen. Do đó, chúng tôi biết sản phẩm tốt nhất dựa trên các bài đánh giá và chúng tôi hiểu rằng Tìm kiếm toàn văn bản hoạt động tốt

Tuy nhiên, có một số lo ngại mà bạn có thể bỏ qua đối với một bảng có năm hàng, nhưng nó có thể mang lại cho chúng tôi lợi ích về hiệu suất và dung lượng lưu trữ trong tập kết quả tương đối lớn nếu được giải quyết kịp thời

Tìm kiếm từ tiếng ồn 'Xin chào' với truy vấn Toàn văn

Có nhiều từ nhiễu kèm theo chỉ mục Toàn văn. Chẳng mấy chốc, họ có thể trở thành gánh nặng. Ngoài ra, họ không sử dụng để tìm kiếm

Hãy kiểm tra xem từ tiếng ồn Hi có xuất hiện trong kết quả Tìm kiếm toàn văn bản hay không vì tốt hơn là loại trừ nó

Chạy truy vấn Toàn văn như sau

________số 8_______

Kết quả dưới đây

Kết quả trả về cho thấy từ “Xin chào” là một phần của kết quả tìm kiếm Toàn văn. Vì vậy, chúng ta cần loại trừ nó – nó vô nghĩa đối với việc tìm kiếm và không giúp ích gì cho bất kỳ phân tích nào

Thay đổi Stoplist để thêm Stopword Hi

Chúng tôi sẽ thêm từ dừng Xin chào bằng cách thay đổi Danh sách dừng tùy chỉnh của chúng tôi để nó không thể được lập chỉ mục bởi tìm kiếm Toàn văn và không được trả về bởi các truy vấn Toàn văn để tiết kiệm dung lượng và cải thiện tìm kiếm

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

Tìm kiếm lại từ tiếng ồn 'Xin chào' sau khi thêm nó làm Từ dừng

Tìm kiếm từ ồn ào Xin chào sau khi thêm từ đó vào Danh sách dừng

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

Đầu ra như sau

Kiểm tra các từ khóa đã thêm

Bất cứ lúc nào, bạn có thể kiểm tra các từ dừng được thêm vào Danh sách dừng. Chạy đoạn script sau cho việc này

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

Kết quả dưới đây

Xin chúc mừng. Bạn đã tạo thành công một danh sách dừng và thêm một từ dừng vào đó. Bằng cách này, bạn làm cho Tìm kiếm toàn văn bản hiệu quả hơn về cả hiệu suất và dung lượng lưu trữ

Những việc cần làm

Bây giờ bạn có thể tạo danh sách dừng và thêm từ dừng vào chúng, hãy thử các cách sau để cải thiện hơn nữa kỹ năng của bạn

  • Thêm các từ 'tôi', 'cái này', 'chỉ', 'làm từ ồn ào vào danh sách dừng tùy chỉnh của bạn được tạo trong hướng dẫn này
  • Kiểm tra các từ dừng đã thêm bằng cách chạy tập lệnh mà chúng tôi đã chỉ định ở cuối hướng dẫn
Thẻ. tìm kiếm toàn văn, máy chủ sql Sửa đổi lần cuối. Ngày 20 tháng 9 năm 2021

Giới thiệu về tác giả / Haroon Ashraf

Mối quan tâm sâu sắc của Haroon đối với logic và lý luận ngay từ khi còn nhỏ trong sự nghiệp học tập đã mở đường cho anh trở thành một chuyên gia dữ liệu. Anh ấy bắt đầu sự nghiệp của mình với tư cách là một lập trình viên máy tính hơn 10 năm trước khi làm việc trong dự án dữ liệu đầu tiên của mình để di chuyển và viết lại hệ thống kiểm tra dựa trên cơ sở dữ liệu khu vực công từ IBM AS400 [DB2] sang SQL Server 2000 bằng VB 6. 0 và ASP cổ điển cùng với việc phát triển báo cáo và lưu trữ dữ liệu trong nhiều năm. Công việc và mối quan tâm của anh ấy xoay quanh Kiến trúc lấy cơ sở dữ liệu làm trung tâm và chuyên môn của anh ấy bao gồm thiết kế, phát triển, thử nghiệm, triển khai và di chuyển cơ sở dữ liệu và báo cáo cùng với Quản lý vòng đời cơ sở dữ liệu [DLM]

Làm cách nào để tìm kiếm với toàn văn trong MySQL?

Để sử dụng tìm kiếm toàn văn bản trong MySQL, bạn cần phải sử dụng các chỉ mục toàn văn bản và hàm MATCH[] . Chỉ mục toàn văn là FULLTEXT. Mysql hỗ trợ các chỉ mục toàn văn trên các bảng MyISAM. Hỗ trợ InnoDB đã được thêm vào kể từ phiên bản 5. 6.

Các từ dừng trong MySQL là gì?

Danh sách từ dừng là dạng tự do, phân tách các từ dừng bằng bất kỳ ký tự không phải chữ và số nào, chẳng hạn như dòng mới, dấu cách hoặc dấu phẩy . Ngoại lệ là ký tự gạch dưới [ _ ] và dấu nháy đơn [ ' ] được coi là một phần của từ.

Toàn văn Stopwords là gì?

Từ dừng có thể là một từ có nghĩa trong một ngôn ngữ cụ thể . Ví dụ: trong ngôn ngữ tiếng Anh, các từ như "a," "and," "is" và "the" không được đưa vào chỉ mục toàn văn vì chúng được biết là vô dụng đối với tìm kiếm. Một từ dừng cũng có thể là một mã thông báo không có ý nghĩa ngôn ngữ. danh sách dừng.

Làm cách nào để tối ưu hóa toàn văn trong MySQL?

Tối ưu hóa các chỉ mục toàn văn bản của InnoDB . Để tránh thời gian xây dựng lại kéo dài cho các chỉ mục toàn văn trên các bảng lớn, bạn có thể sử dụng tùy chọn innodb_ft_num_word_optimize để thực hiện tối ưu hóa theo từng giai đoạn. enable innodb_optimize_fulltext_only and run OPTIMIZE TABLE . To avoid lengthy rebuild times for full-text indexes on large tables, you can use the innodb_ft_num_word_optimize option to perform the optimization in stages.

Chủ Đề