Mysql có tìm kiếm toàn văn không?

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 DESC
1. Sử dụng
SELECT content, MATCH [content] AGAINST ['database engine'] AS relevance FROM articles ORDER BY relevance DESC
2 để 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 DESC
3

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 DESC
4 trong đó
SELECT content, MATCH [content] AGAINST ['database engine'] AS relevance FROM articles ORDER BY relevance DESC
5 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 DESC
6

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ụng
    SELECT * FROM articles WHERE MATCH [content] AGAINST ['database engine' IN NATURAL LANGUAGE MODE];
    25 cho các bảng MyISAM
  • SELECT * 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ùng
  • SELECT * 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ột
    SELECT * 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

SQL Server có hỗ trợ đầy đủ không

Tìm kiếm toàn văn bản trong SQL Server và Azure Cơ sở dữ liệu SQL cho phép người dùng và ứng dụng chạy các truy vấn toàn văn đối với dữ liệu dựa trên ký tự trong bảng SQL Server.

Làm thế nào để đầy đủ

Chỉ mục toàn văn bản được tạo trên các cột dựa trên văn bản [ cột CHAR , VARCHAR hoặc TEXT] để tăng tốc truy vấn và thao tác DML trên dữ liệu chứa trong các cột đó. A full-text index is defined as part of a CREATE TABLE statement or added to an existing table using ALTER TABLE or CREATE INDEX .

đầy đủ là gì

Tìm kiếm toàn văn đề cập đến chức năng trong SQL Server hỗ trợ các truy vấn toàn văn đối với dữ liệu dựa trên ký tự. Các loại truy vấn này có thể bao gồm các từ và cụm từ cũng như nhiều dạng của một từ hoặc cụm từ

Chủ Đề