Tìm kiếm toàn văn trong MySQL – CloudSavvy IT

https://technoglitz.com/vietnam/tim-kiem-toan-van-trong-mysql-cloudsavvy-it/

Tìm kiếm toàn văn trong MySQL – CloudSavvy IT

Làm thế nào để công nghệ 11 Views

Tìm kiếm toàn văn bản là một kỹ thuật cơ sở dữ liệu truy xuất các bản ghi, ngay cả khi chúng không khớp chính xác với tiêu chí tìm kiếm của bạn. Điều này cho phép tìm kiếm bằng một ngôn ngữ tự nhiên phong phú cảm thấy quen thuộc hơn.

Tìm kiếm “công cụ cơ sở dữ liệu”

; bằng cách sử dụng tìm kiếm toàn văn trả về kết quả có chứa các cụm từ “cơ sở dữ liệu”, “công cụ” hoặc “công cụ cơ sở dữ liệu”. Điều này giải quyết những điểm mơ hồ có thể xảy ra trong tiêu chí tìm kiếm của bạn để các hàng như “Tôi có cơ sở dữ liệu và công cụ” vẫn được hiển thị.

Các tìm kiếm đơn giản trong MySQL có thể được thực hiện vớiLIKEnhà điều hành. Điều này không hiệu quả và hạn chế về chức năng. MySQL thường cần thực hiện quét toàn bộ bảng để xác định các bản ghi phù hợp với truy vấn của bạn.

Các truy vấn toàn văn bản sử dụng một chỉ mục được tạo đặc biệt để cải thiện hiệu suất. Điều này cũng cho phép MySQL theo dõi các từ trong tập dữ liệu của bạn, giúp tìm kiếm ngôn ngữ tự nhiên dễ dàng hơn.

Bạn chỉ có thể sử dụng tìm kiếm toàn văn với các cột có chỉ mục toàn văn. Sử dụngFULLTEXTmệnh đềCREATE TABLEhướng dẫn để thiết lập điều này khi bạn khởi tạo giản đồ cơ sở dữ liệu của mình. Bạn cũng có thể sử dụng nó vớiALTER TABLEđể thêm chỉ mục tìm kiếm vào các cột hiện có.

CREATE TABLE articles(content TEXT, FULLTEXT (content));
 
ALTER TABLE articles ADD FULLTEXT (content);

Với chỉ mục tại chỗ, bạn đã sẵn sàng tìm kiếm cơ sở dữ liệu của mình.

Tìm kiếm toàn văn

Tìm kiếm toàn văn bắt đầu bằngWHEREmệnh đề. Bạn đang sử dụngMATCH AGAINSTthay vìLIKEBạn phải chỉ định các cột được lập chỉ mục để phù hợp, cũng như truy vấn tìm kiếm để tìm kiếm.

SELECT * FROM articles WHERE MATCH (content) AGAINST ('database engine' IN NATURAL LANGUAGE MODE);

Thực hiện tìm kiếm toàn bộ văn bản của các bài báo bằng cách sử dụng truy vấn tìm kiếmdatabase engineBằng cách chỉ địnhIN NATURAL LANGUAGE MODE, MySQL được hướng dẫn để diễn giải truy vấn theo nghĩa đen, mà không cần xử lý nó theo bất kỳ cách nào. Đây là chế độ tìm kiếm mặc định nếu không có chế độ nào được chỉ định.

Sắp xếp theo mức độ liên quan của kết quả

Một trong những lợi thế của tìm kiếm toàn văn là bạn có thể sắp xếp các bản ghi trả về theo mức độ liên quan. Điều này là không thể với mộtLIKEhỏi. Bạn có thể nhận được mộtMATCH ... AGAINSTmệnh đề như một phần của SQLSELECTCột ảo được trả về chứa điểm số liên quan, từ 0 đến 1, cho biết mức độ phù hợp của bản ghi với tìm kiếm.

SELECT content, MATCH (content) AGAINST ('database engine') AS relevance FROM articles ORDER BY relevance DESC

Việc tìm kiếm này sẽ trả về những kết quả phù hợp nhất trước tiên. Điều này giúp ứng dụng của bạn đáp ứng kỳ vọng của người dùng về cách các công cụ tìm kiếm ngôn ngữ tự nhiên sẽ hoạt động.

MySQL tính toán các kết quả tìm kiếm có liên quan bằng cách đánh giá các yếu tố khác nhau. Chúng bao gồm số lượng bản ghi phù hợp với truy vấn, cũng như số lần xuất hiện của truy vấn trong mỗi bản ghi. Kết quả có nhiều kết quả phù hợp chính xác cho tìm kiếm sẽ xếp hạng cao hơn kết quả chỉ chứa một phần của tìm kiếm.

Khi đang sử dụngMATCH ... AGAINSTtrong mộtSELECT, bạn không cần phải lặp lại nó trongWHEREmệnh đề. Bạn có thể lọc kết quả theo cách thủ công để chỉ bao gồm các bản ghi có điểm mức độ liên quan khác 0.

SELECT content, MATCH (content) AGAINST ('database engine') AS relevance FROM articles WHERE relevance > 0 ORDER BY relevance DESC

Chế độ tiện ích truy vấn

Ngôn ngữ tự nhiên không phải là chế độ tìm kiếm toàn văn được hỗ trợ duy nhất. Chế độ Nâng cao Truy vấn là một giải pháp thay thế giúp mở rộng phạm vi tiếp cận của các kết quả tìm kiếm. Nó tự động cân nhắc tìm kiếm so với các thuật ngữ có liên quan nhất.

Tìm kiếm nâng cao bắt đầu bằng việc tìm các bản ghi có chứa kết quả phù hợp với tìm kiếm. Những bản ghi đó sau đó được kiểm tra để xác định những từ phù hợp nhất. Cơ sở dữ liệu sau đó được thực thi khác tìm kiếm, lần này dựa trên các từ có liên quan thay vì tìm kiếm ban đầu. Điều này thường dẫn đến nhiều hồ sơ được trả lại hơn trong khi vẫn duy trì mức độ liên quan có thể chấp nhận được.

Để bật chế độ tiện ích mở rộng tìm kiếm:

SELECT * FROM articles WHERE MATCH (content) AGAINST ('database engine' WITH QUERY EXPANSION)

Chế độ Boolean

Chế độ tìm kiếm toàn văn cuối cùng là chế độ Boolean. Điều này cho phép bạn bao gồm các công cụ sửa đổi Boolean trong tìm kiếm của mình. Bạn có thể sử dụng chế độ này nếu bạn cần kiểm soát nâng cao đối với logic tương ứng.

Bạn có thể đặt một từ bắt buộc trong bất kỳ kết quả nào bằng cách thêm tiền tố vào từ đó+Sử dụng-để loại trừ các kết quả có chứa từ này. Các toán tử khác có thể được sử dụng để nối các phần của từ, tạo biểu thức phụ và tạo từ Giảm điểm phù hợp. Cái sau có thể hữu ích trong việc che dấu các thuật ngữ “nhiễu”. Nếu bạn không chỉ định toán tử, điều đó ngụ ý rằng từ được tham chiếu trong truy vấn vớiOR

SELECT * FROM articles WHERE MATCH (content) AGAINST ('+data* engine -sqlite' IN BOOLEAN MODE)

Tìm kiếm này sẽ trả về các bài báo có ít nhất một từ bắt đầu bằngdatathậtsqlitekhông được đề cập. Mỗi kết quả có thể có hoặc không có từengine

Chế độ Boolean cho phép bạn tạo các truy vấn mạnh mẽ với logic của riêng bạn. Một lưu ý là tính điểm không hỗ trợ mức độ liên quan của tìm kiếm. Đây là sự cân bằng để cung cấp cho người dùng khả năng thực hiện các tìm kiếm Boolean. Xếp hạng kết quả có thể không phù hợp với mong đợi của con người.

MySQL đi kèm với một số tùy chọn cấu hình toàn văn bản cho phép bạn tinh chỉnh cách thực hiện tìm kiếm. Đây là một vài trong số những điều quan trọng nhất.

  • innodb_ft_min_token_size– Đặt độ dài từ tối thiểu cho các thuật ngữ được lập chỉ mục. Các từ có ít ký tự hơn giá trị này không được thêm vào chỉ mục, vì vậy bạn không thể tìm kiếm chúng. Giá trị mặc định là3, loại trừ các từ cực kỳ phổ biến nhưaanICài đặt này áp dụng cho các bảng InnoDB; sử dụngft_min_word_lencho MyISAM.

  • innodb_ft_max_token_size– Tương đương vớiinnodb_ft_min_token_size, điều này đặt tối đa độ dài của các từ được lập chỉ mục. Các từ dài hơn không thể tìm kiếm được. Sử dụngft_max_word_lencho các bảng MyISAM.

  • innodb_ft_enable_stopword– Với cài đặt này, được bật theo mặc định, bạn có thể xác định xem MySQL có nên lọc ra các “từ dừng” hay không. Từ dừng là những từ thường được sử dụng có thể ảnh hưởng đến kết quả tìm kiếm một cách không cần thiết. Danh sách các từ dừng tiêu chuẩn bao gồm 36 cụm từ thường được sử dụng.

  • innodb_ft_user_stopword_table– Bạn có thể đặt giá trị này thành tên của bảng cơ sở dữ liệu mà từ đó MySQL sẽ nhận được danh sách từ khóa. Bảng này phải có một bảng duy nhấtVARCHARcộtvalueThêm các từ dừng của bạn để loại trừ dưới dạng bản ghi trong bảng này.

Các cài đặt này thường được đặt trong tệp cấu hình máy chủ MySQL của bạn. Vị trí khác nhau trên mỗi nền tảng; nó thường có thể được tìm thấy tại/etc/mysql/my.cnfBạn phải khởi động lại dịch vụ MySQL sau khi thay đổi cài đặt.

Khi máy chủ đã sao lưu, hãy xây dựng lại các chỉ mục văn bản đầy đủ cho bảng của bạn. Bạn phải làm điều này để dữ liệu của bạn được lập chỉ mục lại với cấu hình hiện tại. Nếu không, dữ liệu đã được lập chỉ mục trước đó sẽ được sử dụng.

Để lập chỉ mục lại một bảng InnoDB, hãy chạyOPTIMIZE TABLE my_tableSử dụng cho bảng MyISAMREPAIR TABLE my_table QUICKCác chỉ mục tìm kiếm sau đó được xây dựng lại để các thay đổi cấu hình của bạn có hiệu lực.

Tổng quat

MySQL Full-Text Search được kích hoạt bởiFULLTEXTlập chỉ mục cho các trường có thể tìm kiếm của bạn. Sau đó bạn sử dụngMATCH ... AGAINSTvới một trong ba chế độ tìm kiếm để nhận kết quả của bạn. Các truy vấn ngôn ngữ tự nhiên trả về điểm số liên quan đến tìm kiếm mà bạn có thể sử dụng để xếp hạng kết quả của mình.

Tìm kiếm toàn văn bản cung cấp hành vi tìm kiếm mạnh mẽ hơn mộtLIKEcách phát âm. Nó cũng hiệu quả hơn nhiều, đặc biệt là với các tập dữ liệu lớn, vì tất cả văn bản đã được lập chỉ mục trước.

Last updated