Tìm kiếm toàn văn bản là một kỹ thuật cơ sở dữ liệu sẽ 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 ngôn ngữ tự nhiên phong phú mang lại cảm giác 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 sẽ trả về kết quả 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 không rõ ràng có thể có trong tiêu chí tìm kiếm của bạn, vì vậy các hàng như “Tôi có cơ sở dữ liệu và công cụ” vẫn hiển thị
Các tìm kiếm đơn giản trong MySQL có thể được thực hiện bằng toán tử
SELECT * FROM articles WHERE MATCH [content] AGAINST ['database engine' IN NATURAL LANGUAGE MODE];8. Điều này là không hiệu quả và hạn chế trong 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
Truy vấn toàn văn sử dụng 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, tạo điều kiện thuận lợi cho việc tìm kiếm ngôn ngữ tự nhiên
Thiết lập Tìm kiếm Toàn văn
Bạn chỉ có thể sử dụng tìm kiếm toàn văn bản với các cột có chỉ mục toàn văn bản. Sử dụng mệnh đề
SELECT * FROM articles WHERE MATCH [content] AGAINST ['database engine' IN NATURAL LANGUAGE MODE];9 trong câu lệnh
SELECT * FROM articles WHERE MATCH [content] AGAINST ['database engine' IN NATURAL LANGUAGE MODE];0 để thiết lập điều này khi bạn khởi tạo lược đồ cơ sở dữ liệu của mình. Bạn cũng có thể sử dụng nó với
SELECT * FROM articles WHERE MATCH [content] AGAINST ['database engine' IN NATURAL LANGUAGE MODE];1 để 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 bắt đầu truy vấn cơ sở dữ liệu của mình
Sử dụng Tìm kiếm Toàn văn
Tìm kiếm toàn văn bắt đầu bằng mệnh đề
SELECT * FROM articles WHERE MATCH [content] AGAINST ['database engine' IN NATURAL LANGUAGE MODE];0. Bạn sử dụng
SELECT * FROM articles WHERE MATCH [content] AGAINST ['database engine' IN NATURAL LANGUAGE MODE];1 thay vì
SELECT * FROM articles WHERE MATCH [content] AGAINST ['database engine' IN NATURAL LANGUAGE MODE];8. Bạn cần chỉ ra các cột được lập chỉ mục để khớp, cũng như truy vấn để tìm kiếm
SELECT * FROM articles WHERE MATCH [content] AGAINST ['database engine' IN NATURAL LANGUAGE MODE];
Thao tác này sẽ thực hiện tìm kiếm toàn văn các bài báo bằng truy vấn
SELECT * FROM articles WHERE MATCH [content] AGAINST ['database engine' IN NATURAL LANGUAGE MODE];3. Bằng cách chỉ định
SELECT * FROM articles WHERE MATCH [content] AGAINST ['database engine' IN NATURAL LANGUAGE MODE];4, 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 ưu điểm của tìm kiếm toàn văn là nó cho phép bạn sắp xếp các bản ghi được trả về theo mức độ liên quan. Điều này là không thể với truy vấn
SELECT * FROM articles WHERE MATCH [content] AGAINST ['database engine' IN NATURAL LANGUAGE MODE];8 thông thường. Bạn có thể sử dụng mệnh đề
SELECT * FROM articles WHERE MATCH [content] AGAINST ['database engine' IN NATURAL LANGUAGE MODE];6 như một phần của SQL
SELECT * FROM articles WHERE MATCH [content] AGAINST ['database engine' IN NATURAL LANGUAGE MODE];7. Cột ảo được trả về sẽ chứa điểm phù hợp, từ 0 đến 1, cho biết mức độ phù hợp của bản ghi với truy vấn tìm kiếm
________số 8
Truy vấn này sẽ trả về 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 mong đợi của người dùng về cách hệ thống tìm kiếm ngôn ngữ tự nhiên sẽ hoạt động
MySQL tính điểm tìm kiếm có liên quan bằng cách đánh giá một số 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 truy vấn xảy ra trong mỗi bản ghi. Một kết quả có nhiều kết quả khớp chính xác cho truy vấn sẽ xếp hạng cao hơn kết quả chỉ chứa một phần của truy vấn
Khi dùng
SELECT * FROM articles WHERE MATCH [content] AGAINST ['database engine' IN NATURAL LANGUAGE MODE];6 trong mệnh đề
SELECT * FROM articles WHERE MATCH [content] AGAINST ['database engine' IN NATURAL LANGUAGE MODE];7, bạn không cần lặp lại nó trong mệnh đề
SELECT * FROM articles WHERE MATCH [content] AGAINST ['database engine' IN NATURAL LANGUAGE MODE];0. 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 phù hợp khác không
SELECT * FROM articles WHERE MATCH [content] AGAINST ['database engine' IN NATURAL LANGUAGE MODE];2
Chế độ mở rộng truy vấn
Ngôn ngữ tự nhiên không phải là chế độ tìm kiếm toàn văn duy nhất được hỗ trợ. Chế độ mở rộng truy vấn là một giải pháp thay thế giúp mở rộng phạm vi kết quả tìm kiếm. Nó tự động cân nhắc truy vấn tìm kiếm đối với các cụm từ có liên quan nhất
Một tìm kiếm mở rộng bắt đầu bằng cách tìm các bản ghi có chứa kết quả phù hợp cho truy vấn. Những bản ghi đó sau đó được kiểm tra để xác định các từ có liên quan nhất. Cơ sở dữ liệu sau đó chạy một tìm kiếm khác, lần này dựa trên các từ có liên quan thay vì truy vấn ban đầu. Điều này thường dẫn đến nhiều bản ghi hơn được trả về trong khi vẫn duy trì mức độ liên quan có thể chấp nhận được
Đây là cách bạn bật chế độ mở rộng truy vấn
SELECT * FROM articles WHERE MATCH [content] AGAINST ['database engine' IN NATURAL LANGUAGE MODE];3
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 truy vấn của mình. Bạn có thể sử dụng chế độ này khi cần kiểm soát nâng cao đối với logic phù hợp
Bạn có thể yêu cầu một từ xuất hiện trong mỗi kết quả bằng cách đặt trước từ đó bằng
SELECT content, MATCH [content] AGAINST ['database engine'] AS relevance FROM articles ORDER BY relevance DESC1. Sử dụng
SELECT content, MATCH [content] AGAINST ['database engine'] AS relevance FROM articles ORDER BY relevance DESC2 để loại trừ các kết quả có chứa từ. 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 con và làm cho từ giảm điểm liên quan. Cái sau có thể hữu ích khi che dấu các thuật ngữ "tiếng ồn". Nếu bạn không chỉ định toán tử, điều đó có nghĩa là từ đó sẽ được tham chiếu trong truy vấn với
SELECT content, MATCH [content] AGAINST ['database engine'] AS relevance FROM articles ORDER BY relevance DESC3
SELECT * FROM articles WHERE MATCH [content] AGAINST ['database engine' IN NATURAL LANGUAGE MODE];7
Truy vấn này sẽ hiển thị các bài báo có ít nhất một từ bắt đầu bằng
SELECT content, MATCH [content] AGAINST ['database engine'] AS relevance FROM articles ORDER BY relevance DESC4 trong đó
SELECT content, MATCH [content] AGAINST ['database engine'] AS relevance FROM articles ORDER BY relevance DESC5 không được đề cập. Mỗi kết quả có thể có hoặc không bao gồm từ
SELECT content, MATCH [content] AGAINST ['database engine'] AS relevance FROM articles ORDER BY relevance DESC6
Chế độ Boolean cho phép bạn xây dựng các tìm kiếm mạnh mẽ bằng cách sử dụng logic của riêng bạn. Một lưu ý là nó không hỗ trợ chấm điểm liên quan đến tìm kiếm. Đây là sự đánh đổi trong việc 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
Định cấu hình Tìm kiếm Toàn văn
MySQL đi kèm với một số tùy chọn cấu hình toàn văn cho phép bạn tinh chỉnh cách tiến hành tìm kiếm. Đây là một vài điều quan trọng nhất
SELECT content, MATCH [content] AGAINST ['database engine'] AS relevance FROM articles ORDER BY relevance DESC
7 – Đặ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 sẽ không được thêm vào chỉ mục nên bạn sẽ không thể tìm kiếm chúng. Giá trị mặc định làSELECT content, MATCH [content] AGAINST ['database engine'] AS relevance FROM articles ORDER BY relevance DESC
8, loại trừ các từ cực kỳ phổ biến nhưSELECT content, MATCH [content] AGAINST ['database engine'] AS relevance FROM articles ORDER BY relevance DESC
9,SELECT * FROM articles WHERE MATCH [content] AGAINST ['database engine' IN NATURAL LANGUAGE MODE];
20 vàSELECT * FROM articles WHERE MATCH [content] AGAINST ['database engine' IN NATURAL LANGUAGE MODE];
21. Cài đặt này áp dụng cho các bảng InnoDB;SELECT * FROM articles WHERE MATCH [content] AGAINST ['database engine' IN NATURAL LANGUAGE MODE];
23 – Tương tự nhưSELECT content, MATCH [content] AGAINST ['database engine'] AS relevance FROM articles ORDER BY relevance DESC
7, điều này đặt độ dài tối đa của các từ được lập chỉ mục. Các từ dài hơn sẽ không thể tìm kiếm được. Sử dụngSELECT * FROM articles WHERE MATCH [content] AGAINST ['database engine' IN NATURAL LANGUAGE MODE];
25 cho các bảng MyISAMSELECT * FROM articles WHERE MATCH [content] AGAINST ['database engine' IN NATURAL LANGUAGE MODE];
26 – Cài đặt này, được bật theo mặc định, cho phép bạn kiểm soát xem MySQL có nên lọc “từ dừng” hay không. Từ dừng là những từ được sử dụng rất phổ biến có thể ảnh hưởng quá mức đến kết quả tìm kiếm. Danh sách từ dừng mặc định chứa 36 cụm từ thường dùngSELECT * FROM articles WHERE MATCH [content] AGAINST ['database engine' IN NATURAL LANGUAGE MODE];
27 – Bạn có thể đặt giá trị này thành tên của bảng cơ sở dữ liệu mà MySQL sẽ lấy danh sách từ dừng từ đó. Bảng này phải có một cộtSELECT * FROM articles WHERE MATCH [content] AGAINST ['database engine' IN NATURAL LANGUAGE MODE];
28 duy nhất được gọi làSELECT * FROM articles WHERE MATCH [content] AGAINST ['database engine' IN NATURAL LANGUAGE MODE];
29. Thêm từ khóa 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í thay đổi theo nền tảng; . Bạn sẽ cần khởi động lại dịch vụ MySQL sau khi thay đổi cài đặt
Sau khi máy chủ được sao lưu, hãy xây dựng lại các chỉ mục toàn văn 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 bằng cách sử dụng cấu hình hiện tại. Nếu không, dữ liệu được lập chỉ mục trước đó sẽ tiếp tục được sử dụng
Để lập chỉ mục lại một bảng InnoDB, hãy chạy
SELECT * FROM articles WHERE MATCH [content] AGAINST ['database engine' IN NATURAL LANGUAGE MODE];31. Đối với các bảng MyISAM, hãy sử dụng
SELECT * FROM articles WHERE MATCH [content] AGAINST ['database engine' IN NATURAL LANGUAGE MODE];32. Các chỉ mục tìm kiếm sau đó sẽ được xây dựng lại để thay đổi cấu hình của bạn có hiệu lực
Bản tóm tắt
MySQL Full-Text Search được bật bằng cách thêm chỉ mục
SELECT * FROM articles WHERE MATCH [content] AGAINST ['database engine' IN NATURAL LANGUAGE MODE];9 vào các trường có thể tìm kiếm của bạn. Sau đó, bạn sử dụng
SELECT * FROM articles WHERE MATCH [content] AGAINST ['database engine' IN NATURAL LANGUAGE MODE];6 với một trong ba chế độ tìm kiếm để nhận kết quả của mình. 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 cung cấp hành vi tìm kiếm mạnh mẽ hơn so với câu lệnh
SELECT * FROM articles WHERE MATCH [content] AGAINST ['database engine' IN NATURAL LANGUAGE MODE];8. Nó cũng hiệu quả hơn nhiều, đặc biệt là trên các tập dữ liệu lớn, vì tất cả văn bản đều được lập chỉ mục trước