Chế độ ngôn ngữ tự nhiên tìm kiếm toàn văn mysql
Tìm kiếm toàn văn bản trong máy chủ MySQL cho phép người dùng chạy truy vấn toàn văn bản đối với dữ liệu dựa trên ký tự trong bảng MySQL. Bạn phải tạo chỉ mục toàn văn trên bảng trước khi chạy truy vấn toàn văn trên bảng. Chỉ mục toàn văn có thể bao gồm một hoặc nhiều cột dựa trên ký tự trong bảng Show
Phiên bản MySQL. 5. 6 cú pháp MATCH (col1,col2,col3...) AGAINST (expr [search_modifier])
Có ba loại tìm kiếm toàn văn
Ghi chú. Một số từ bị bỏ qua trong các tìm kiếm toàn văn
Tìm kiếm toàn văn bằng ngôn ngữ tự nhiên Tìm kiếm toàn văn bằng ngôn ngữ tự nhiên diễn giải chuỗi tìm kiếm dưới dạng văn bản tự do (ngôn ngữ tự nhiên của con người) và không yêu cầu toán tử đặc biệt nào. Tìm kiếm toàn văn là tìm kiếm ngôn ngữ tự nhiên nếu công cụ sửa đổi CHẾ ĐỘ NGÔN NGỮ TỰ NHIÊN (xem cú pháp sau) được cung cấp hay không. Hàm MATCH() tìm kiếm một chuỗi dựa vào tập hợp văn bản (Tập hợp một hoặc nhiều cột có trong chỉ mục FULLTEXT. ). Đối với mỗi hàng trong bảng, hàm MATCH() trả về một giá trị liên quan; Định dạng cơ bản của truy vấn chế độ tìm kiếm văn bản null Ngôn ngữ tự nhiên như sau Mã số
Ví dụ mysql> CREATE TABLE tutorial ( id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY, title VARCHAR(200), description TEXT, FULLTEXT(title,description) ) ENGINE=InnoDB; Query OK, 0 rows affected (2.40 sec) Hãy chèn một số bản ghi vào bảng hướng dẫn mysql>INSERT INTO tutorial (title,description) VALUES ('SQL Joins','An SQL JOIN clause combines rows from two or more tables. It creates a set of rows in a temporary table.'), ('SQL Equi Join','SQL EQUI JOIN performs a JOIN against equality or matching column(s) values of the associated tables. An equal sign (=) is used as comparison operator in the where clause to refer equality.'), ('SQL Left Join','The SQL LEFT JOIN, joins two tables and fetches rows based on a condition, which is matching in both the tables and the unmatched rows will also be available from the table before the JOIN clause.'), ('SQL Cross Join','The SQL CROSS JOIN produces a result set which is the number of rows in the first table multiplied by the number of rows in the second table, if no WHERE clause is used along with CROSS JOIN.'), ('SQL Full Outer Join','In SQL the FULL OUTER JOIN combines the results of both left and right outer joins and returns all (matched or unmatched) rows from the tables on both sides of the join clause.'), ('SQL Self Join','A self join is a join in which a table is joined with itself (which is also called Unary relationships), especially when the table has a FOREIGN KEY which references its own PRIMARY KEY.'); Hãy tìm kiếm chuỗi 'trái phải' trong trường mô tả mysql> SELECT * FROM tutorial WHERE MATCH(title,description) AGAINST ('left right' IN NATURAL LANGUAGE MODE); +----+---------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | id | title | description | +----+---------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | 5 | SQL Full Outer Join | In SQL the FULL OUTER JOIN combines the results of both left and right outer joins and returns all (matched or unmatched) rows from the tables on both sides of the join clause. | | 3 | SQL Left Join | The SQL LEFT JOIN, joins two tables and fetches rows based on a condition, which are matching in both the tables, and the unmatched rows will also be available from the table before the JOIN clause. | +----+---------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 2 rows in set (0.00 sec) Theo mặc định, tìm kiếm không phân biệt chữ hoa chữ thường. Để thực hiện tìm kiếm toàn văn phân biệt chữ hoa chữ thường, hãy sử dụng đối chiếu nhị phân cho các cột được lập chỉ mục. Ví dụ: một cột sử dụng bộ ký tự latin1 có thể được chỉ định đối chiếu latin1_bin để phân biệt chữ hoa chữ thường đối với các tìm kiếm toàn văn Khi MATCH() được sử dụng trong mệnh đề WHERE, như trong ví dụ được hiển thị trước đó, các hàng được trả về sẽ tự động được sắp xếp với mức độ liên quan cao nhất trước tiên
Ví dụ sau đây cho thấy cách truy xuất các giá trị liên quan một cách rõ ràng <mysql> SELECT id, MATCH(title,description) AGAINST ('left right' IN NATURAL LANGUAGE MODE) AS score FROM tutorial; +----+---------------------+ | id | score | +----+---------------------+ | 1 | 0 | | 2 | 0 | | 3 | 0.45528939366340637 | | 4 | 0 | | 5 | 0.8331640362739563 | | 6 | 0 | +----+---------------------+ 6 rows in set (0.00 sec) Đếm trận đấu Để đếm các trận đấu, bạn có thể sử dụng một truy vấn như thế này mysql> SELECT COUNT(*) FROM tutorial WHERE MATCH(title,description) AGAINST ('left right' IN NATURAL LANGUAGE MODE); +----------+ | COUNT(*) | +----------+ | 2 | +----------+ 1 row in set (0.03 sec) Tìm kiếm toàn văn Boolean Tìm kiếm boolean diễn giải chuỗi tìm kiếm bằng cách sử dụng các quy tắc của ngôn ngữ truy vấn đặc biệt. Chuỗi chứa các từ cần tìm. Nó cũng có thể chứa các toán tử xác định các yêu cầu chẳng hạn như một từ phải có hoặc không có trong các hàng phù hợp hoặc từ đó phải có trọng số cao hơn hoặc thấp hơn bình thường. Một số từ phổ biến (từ dừng) bị bỏ qua khỏi chỉ mục tìm kiếm và không khớp nếu có trong chuỗi tìm kiếm. MySQL có thể thực hiện tìm kiếm toàn văn boolean bằng công cụ sửa đổi IN BOOLEAN MODE . Với công cụ sửa đổi này, một số ký tự có ý nghĩa đặc biệt ở đầu hoặc cuối từ trong chuỗi tìm kiếm Định dạng cơ bản của truy vấn chế độ boolean như sau Mã số
Đặc điểm của tìm kiếm Toàn văn Boolean
Tìm kiếm toàn văn boolean hỗ trợ các toán tử sau Toán tửMô tảVí dụ + Dấu cộng ở đầu biểu thị rằng một từ phải có trong mỗi hàng được trả về '+join +union' Tìm các hàng chứa từ 'join' nhưng không chứa từ 'union'. (không có toán tử)Theo mặc định, từ này là tùy chọn, nhưng các hàng chứa từ này được xếp hạng cao hơn. 'join -union' Tìm kiếm các hàng chứa ít nhất một trong hai từ. >< Hai toán tử này được sử dụng để thay đổi phần đóng góp của một từ vào giá trị liên quan được gán cho một hàng. Toán tử > tăng mức đóng góp và toán tử < giảm mức đóng góp. '+join +(>left Tìm các hàng có chứa từ 'tham gia' và 'trái' hoặc 'tham gia' và 'phải' (theo thứ tự bất kỳ), nhưng xếp hạng ' . ( ) Dấu ngoặc đơn nhóm các từ thành các biểu thức con. Các nhóm được đặt trong ngoặc đơn có thể được lồng vào nhau. ~ Dấu ngã đứng đầu hoạt động như một toán tử phủ định, làm cho phần đóng góp của từ vào mức độ liên quan của hàng là phủ định. '+join ~left' Tìm các hàng có chứa từ 'tham gia', nhưng nếu hàng đó cũng chứa từ 'left', hãy xếp hạng thấp hơn nếu hàng không có. *Dấu hoa thị đóng vai trò là toán tử cắt ngắn (hoặc ký tự đại diện). Không giống như các toán tử khác, nó được thêm vào từ bị ảnh hưởng. Các từ khớp nếu chúng bắt đầu bằng từ đứng trước toán tử *. 'tham gia*' Tìm các hàng có chứa các từ như 'tham gia', 'tham gia', 'tham gia', v.v. "Cụm từ được đặt trong dấu ngoặc kép (""”) các ký tự chỉ khớp với các hàng chứa cụm từ theo nghĩa đen, như nó đã được nhập. '"tham gia trái"' Tìm các hàng chứa cụm từ chính xác "hãy tham gia". Ví dụ. Tìm kiếm toàn văn Boolean Trong truy vấn sau đây, truy vấn sẽ truy xuất tất cả các hàng có chứa từ 'Tham gia' chứ không phải từ 'đúng'. Làm cách nào để tìm kiếm FULLTEXT 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.
InnoDB có hỗ trợ đầy đủ khôngChỉ có thể sử dụng chỉ mục toàn văn với các bảng MyISAM, Aria, InnoDB và Mroonga và chỉ có thể được tạo cho các cột CHAR, VARCHAR hoặc TEXT.
Làm cách nào để sử dụng chỉ mục FULLTEXT trong MySQL?Trong MySQL, chỉ mục toàn văn bản luôn được đặt tên là FULLTEXT. Chúng ta có thể định nghĩa chỉ mục toàn văn bản có kiểu dữ liệu cột là CHAR, VARCHAR và TEXT. Chúng ta có thể xác định chỉ mục toàn văn trong khi tạo bảng bằng cách sử dụng câu lệnh CREATE TABLE hoặc sử dụng câu lệnh ALTER TABLE hoặc CREATE INDEX cho bảng hiện có .
Khi nào sử dụng đầy đủChỉ có thể sử dụng chỉ mục FULLTEXT trên các bảng chạy công cụ lưu trữ InnoDB hoặc MyISAM . Các chỉ mục FULLTEXT chỉ có thể được tạo cho các cột CHAR, VARCHAR hoặc TEXT. Các chỉ mục FULLTEXT chỉ được sử dụng khi mệnh đề MATCH() AGAINST() được sử dụng. |