Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Cách hoạt động của hàm MATCH () trong MySQL

Trong MySQL, MATCH() chức năng thực hiện tìm kiếm toàn văn bản. Nó chấp nhận một danh sách được phân tách bằng dấu phẩy gồm các cột trong bảng cần tìm kiếm.

/ Các bảng phải có FULLTEXT lập chỉ mục trước khi bạn có thể thực hiện tìm kiếm toàn văn đối với chúng (mặc dù các truy vấn boolean đối với MyISAM chỉ mục tìm kiếm có thể hoạt động - mặc dù chậm - ngay cả khi không có FULLTEXT mục lục).

Bạn có thể tạo FULLTEXT lập chỉ mục khi tạo bảng (sử dụng CREATE TABLE câu lệnh), hoặc bạn có thể sử dụng ALTER TABLE hoặc câu lệnh CREATE INDEX nếu bảng đã tồn tại.

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 phân biệt chữ hoa chữ thường, hãy sử dụng đối chiếu nhị phân hoặc phân biệt chữ hoa chữ thường cho các cột được lập chỉ mục.

Cú pháp

Cú pháp cho MATCH() hàm như sau:

MATCH (col1,col2,...) AGAINST (expr [search_modifier])

Trong đó col1,col2,... là danh sách các cột được phân tách bằng dấu phẩy để tìm kiếm và expr là chuỗi / biểu thức đầu vào.

search_modifier tùy chọn đối số cho phép bạn chỉ định loại tìm kiếm. Nó có thể là bất kỳ giá trị nào sau đây:

  • IN NATURAL LANGUAGE MODE
  • IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION
  • IN BOOLEAN MODE
  • WITH QUERY EXPANSION

Chế độ mặc định là IN NATURAL LANGUAGE MODE .

Ví dụ 1 - Cách sử dụng cơ bản

Dưới đây là một ví dụ về cách sử dụng chức năng này:

SELECT AlbumId, AlbumName
FROM Albums
WHERE MATCH(AlbumName) AGAINST('cool');

Kết quả:

+---------+--------------------+
| AlbumId | AlbumName          |
+---------+--------------------+
|       5 | Casualties of Cool |
+---------+--------------------+

Đây là bảng đầy đủ mà truy vấn trên đã được chạy với:

SELECT AlbumId, AlbumName
FROM Albums;

Kết quả:

+---------+--------------------------+
| AlbumId | AlbumName                |
+---------+--------------------------+
|       1 | Powerslave               |
|       2 | Powerage                 |
|       3 | Singing Down the Lane    |
|       4 | Ziltoid the Omniscient   |
|       5 | Casualties of Cool       |
|       6 | Epicloud                 |
|       7 | Somewhere in Time        |
|       8 | Piece of Mind            |
|       9 | Killers                  |
|      10 | No Prayer for the Dying  |
|      11 | No Sound Without Silence |
|      12 | Big Swing Face           |
|      13 | Blue Night               |
|      14 | Eternity                 |
|      15 | Scandinavia              |
|      16 | Long Lost Suitcase       |
|      17 | Praise and Blame         |
|      18 | Along Came Jones         |
|      19 | All Night Wrong          |
|      20 | The Sixteen Men of Tain  |
+---------+--------------------------+

Ví dụ 2 - Lỗi:“Không thể tìm thấy chỉ mục FULLTEXT”

InnoDB bảng phải có FULLTEXT lập chỉ mục trước khi nó sẽ trả về kết quả từ một tìm kiếm toàn văn. Nếu nó không có FULLTEXT lập chỉ mục, bạn có thể sẽ gặp lỗi sau:

ERROR 1191 (HY000): Can't find FULLTEXT index matching the column list

Nếu gặp lỗi đó, bạn cần thêm FULLTEXT lập chỉ mục cho tất cả các cột mà bạn đang cố gắng tìm kiếm (xem ví dụ tiếp theo).

Ngoại lệ cho điều này có thể là nếu bạn đang chạy một truy vấn boolean chống lại một MyISAM chỉ mục tìm kiếm.

Để cụ thể hơn, tài liệu MySQL cho tìm kiếm toàn văn bản boolean nêu rõ như sau:

InnoDB bảng yêu cầu FULLTEXT lập chỉ mục trên tất cả các cột của MATCH() biểu thức để thực hiện các truy vấn boolean. Truy vấn Boolean đối với MyISAM chỉ mục tìm kiếm có thể hoạt động ngay cả khi không có FULLTEXT chỉ mục, mặc dù một tìm kiếm được thực thi theo kiểu này sẽ khá chậm.

Ví dụ 3 - Thêm chỉ mục FULLTEXT vào bảng hiện có

Đây là ví dụ về việc thêm FULLTEXT lập chỉ mục cho một bảng hiện có:

ALTER TABLE Albums  
ADD FULLTEXT(AlbumName);

Trong trường hợp này, tôi đã lập chỉ mục nội dung của AlbumName cột.

Để lập chỉ mục nhiều cột, hãy phân tách chúng bằng dấu phẩy (xem ví dụ tiếp theo).

Ví dụ 4 - Tìm kiếm Nhiều Cột

Nếu bạn cho rằng mình cần tìm kiếm nhiều hơn một cột, bạn sẽ cần tạo một chỉ mục bao gồm tất cả các cột cần tìm kiếm. Để thực hiện việc này, chỉ cần bao gồm mỗi cột dưới dạng danh sách được phân tách bằng dấu phẩy.

Đây là một ví dụ mà tôi thêm một FULLTEXT lập chỉ mục cho film bảng (là một phần của cơ sở dữ liệu mẫu Sakila).

ALTER TABLE film 
ADD FULLTEXT(title, description);

Trong trường hợp này, tôi lập chỉ mục nội dung của titledescription cột.

Bây giờ chúng tôi đã tạo một FULLTEXT lập chỉ mục cho cả hai cột, chúng tôi có thể thực hiện tìm kiếm toàn văn dựa trên chúng:

SELECT title, description
FROM film
WHERE MATCH(title, description) AGAINST('vertigo');

Kết quả:

+-------------------+-----------------------------------------------------------------------------------------------------------+
| title             | description                                                                                               |
+-------------------+-----------------------------------------------------------------------------------------------------------+
| VERTIGO NORTHWEST | A Unbelieveable Display of a Mad Scientist And a Mad Scientist who must Outgun a Mad Cow in Ancient Japan |
+-------------------+-----------------------------------------------------------------------------------------------------------+

Đây là một tìm kiếm khác, trong đó cụm từ khóa chính xác không khớp, nhưng mỗi từ khóa trong cụm từ đó thực hiện:

SELECT title, description
FROM film
WHERE MATCH(title, description) AGAINST('Iron Maiden');

Kết quả:

+-------------+---------------------------------------------------------------------------------------------------------+
| title       | description                                                                                             |
+-------------+---------------------------------------------------------------------------------------------------------+
| IRON MOON   | A Fast-Paced Documentary of a Mad Cow And a Boy who must Pursue a Dentist in A Baloon                   |
| MAIDEN HOME | A Lacklusture Saga of a Moose And a Teacher who must Kill a Forensic Psychologist in A MySQL Convention |
+-------------+---------------------------------------------------------------------------------------------------------+

Nếu bạn chỉ muốn đối sánh cụm từ chính xác, hãy đặt dấu ngoặc kép xung quanh cụm từ đó:

SELECT title, description
FROM film
WHERE MATCH(title, description) AGAINST('"Iron Maiden"');

Kết quả:

Empty set (0.00 sec)

Trong trường hợp này, không cột nào chứa cụm từ chính xác đó.

Ví dụ 5 - Trả lại Điểm phù hợp

Bất cứ khi nào bạn sử dụng MATCH() mỗi hàng trong bảng được gán một giá trị liên quan. Nói cách khác, mỗi hàng nhận được điểm xác định mức độ liên quan của hàng đó với cụm từ tìm kiếm. Các kết quả sau đó được sắp xếp theo mức độ liên quan (mức độ liên quan cao nhất trước).

Giá trị mức độ liên quan là số dấu phẩy động không âm. Mức độ liên quan bằng không có nghĩa là không có sự tương đồng. Mức độ liên quan được tính dựa trên số từ trong hàng (tài liệu), số từ duy nhất trong hàng, tổng số từ trong bộ sưu tập và số hàng chứa một từ cụ thể.

Để trả về mức độ liên quan của từng kết quả, chỉ cần bao gồm MATCH() chức năng trong danh sách các cột của bạn để chọn.

Ví dụ:

SELECT 
  MATCH(title, description) AGAINST('Iron Maiden') AS Relevance,
  title, 
  description
FROM film
WHERE MATCH(title, description) AGAINST('Iron Maiden');

Kết quả:

+-----------+-------------+---------------------------------------------------------------------------------------------------------+
| Relevance | title       | description                                                                                             |
+-----------+-------------+---------------------------------------------------------------------------------------------------------+
|         9 | IRON MOON   | A Fast-Paced Documentary of a Mad Cow And a Boy who must Pursue a Dentist in A Baloon                   |
|         9 | MAIDEN HOME | A Lacklusture Saga of a Moose And a Teacher who must Kill a Forensic Psychologist in A MySQL Convention |
+-----------+-------------+---------------------------------------------------------------------------------------------------------+

Trong trường hợp này, điểm phù hợp là rất cao cho cả hai hàng.

Đây là một cái khác có mức độ liên quan thấp hơn:

SELECT 
  MATCH(title, description) AGAINST('Saga of a Moose') AS Relevance,
  title, 
  description
FROM film
WHERE MATCH(title, description) AGAINST('Saga of a Moose')
LIMIT 15;

Kết quả:

+--------------------+------------------------+---------------------------------------------------------------------------------------------------------+
| Relevance          | title                  | description                                                                                             |
+--------------------+------------------------+---------------------------------------------------------------------------------------------------------+
| 2.4431142807006836 | CAPER MOTIONS          | A Fateful Saga of a Moose And a Car who must Pursue a Woman in A MySQL Convention                       |
| 2.4431142807006836 | DATE SPEED             | A Touching Saga of a Composer And a Moose who must Discover a Dentist in A MySQL Convention             |
| 2.4431142807006836 | DELIVERANCE MULHOLLAND | A Astounding Saga of a Monkey And a Moose who must Conquer a Butler in A Shark Tank                     |
| 2.4431142807006836 | FLASH WARS             | A Astounding Saga of a Moose And a Pastry Chef who must Chase a Student in The Gulf of Mexico           |
| 2.4431142807006836 | HAROLD FRENCH          | A Stunning Saga of a Sumo Wrestler And a Student who must Outrace a Moose in The Sahara Desert          |
| 2.4431142807006836 | MAIDEN HOME            | A Lacklusture Saga of a Moose And a Teacher who must Kill a Forensic Psychologist in A MySQL Convention |
| 2.4431142807006836 | SHANE DARKNESS         | A Action-Packed Saga of a Moose And a Lumberjack who must Find a Woman in Berlin                        |
| 2.4431142807006836 | SLEEPLESS MONSOON      | A Amazing Saga of a Moose And a Pastry Chef who must Escape a Butler in Australia                       |
| 2.4431142807006836 | WAKE JAWS              | A Beautiful Saga of a Feminist And a Composer who must Challenge a Moose in Berlin                      |
| 2.4431142807006836 | WONKA SEA              | A Brilliant Saga of a Boat And a Mad Scientist who must Meet a Moose in Ancient India                   |
| 1.2399028539657593 | AIRPLANE SIERRA        | A Touching Saga of a Hunter And a Butler who must Discover a Butler in A Jet Boat                       |
| 1.2399028539657593 | ALASKA PHANTOM         | A Fanciful Saga of a Hunter And a Pastry Chef who must Vanquish a Boy in Australia                      |
| 1.2399028539657593 | ARMY FLINTSTONES       | A Boring Saga of a Database Administrator And a Womanizer who must Battle a Waitress in Nigeria         |
| 1.2399028539657593 | BEAR GRACELAND         | A Astounding Saga of a Dog And a Boy who must Kill a Teacher in The First Manned Space Station          |
| 1.2399028539657593 | BERETS AGENT           | A Taut Saga of a Crocodile And a Boy who must Overcome a Technical Writer in Ancient China              |
+--------------------+------------------------+---------------------------------------------------------------------------------------------------------+

Lưu ý rằng tập hợp kết quả sẽ lớn hơn nhiều nếu tôi không sử dụng LIMIT 15 để giới hạn số lượng kết quả là 15.

Ví dụ 6 - Chỉ trả về kết quả trên một điểm phù hợp nhất định

Chúng ta có thể lấy ví dụ trước đó thêm một bước và chỉ lọc ra những kết quả có điểm phù hợp nhất định. Trong trường hợp này, tôi chỉ định rằng điểm phù hợp phải cao hơn 2.

Hãy cẩn thận khi làm điều này mặc dù. Như đã thấy ở trên, giá trị mức độ liên quan có thể rất cao hoặc rất thấp, tùy thuộc vào các yếu tố như lượng văn bản trong cột, bao nhiêu hàng khác khớp với cụm từ tìm kiếm, v.v.

SELECT 
  MATCH(title, description) AGAINST('Saga of a Moose') AS Relevance,
  title, 
  description
FROM film
WHERE MATCH(title, description) AGAINST('Saga of a Moose') > 2;

Kết quả:

+--------------------+------------------------+---------------------------------------------------------------------------------------------------------+
| Relevance          | title                  | description                                                                                             |
+--------------------+------------------------+---------------------------------------------------------------------------------------------------------+
| 2.4431142807006836 | CAPER MOTIONS          | A Fateful Saga of a Moose And a Car who must Pursue a Woman in A MySQL Convention                       |
| 2.4431142807006836 | DATE SPEED             | A Touching Saga of a Composer And a Moose who must Discover a Dentist in A MySQL Convention             |
| 2.4431142807006836 | DELIVERANCE MULHOLLAND | A Astounding Saga of a Monkey And a Moose who must Conquer a Butler in A Shark Tank                     |
| 2.4431142807006836 | FLASH WARS             | A Astounding Saga of a Moose And a Pastry Chef who must Chase a Student in The Gulf of Mexico           |
| 2.4431142807006836 | HAROLD FRENCH          | A Stunning Saga of a Sumo Wrestler And a Student who must Outrace a Moose in The Sahara Desert          |
| 2.4431142807006836 | MAIDEN HOME            | A Lacklusture Saga of a Moose And a Teacher who must Kill a Forensic Psychologist in A MySQL Convention |
| 2.4431142807006836 | SHANE DARKNESS         | A Action-Packed Saga of a Moose And a Lumberjack who must Find a Woman in Berlin                        |
| 2.4431142807006836 | SLEEPLESS MONSOON      | A Amazing Saga of a Moose And a Pastry Chef who must Escape a Butler in Australia                       |
| 2.4431142807006836 | WAKE JAWS              | A Beautiful Saga of a Feminist And a Composer who must Challenge a Moose in Berlin                      |
| 2.4431142807006836 | WONKA SEA              | A Brilliant Saga of a Boat And a Mad Scientist who must Meet a Moose in Ancient India                   |
+--------------------+------------------------+---------------------------------------------------------------------------------------------------------+

Ví dụ 7 - Không bao gồm các kết quả có mức độ liên quan

Dưới đây là một ví dụ về việc liệt kê các giá trị mức độ liên quan cho mỗi hàng, ngay cả khi giá trị mức độ liên quan bằng 0. Chúng tôi có thể làm điều này bằng cách không sử dụng MATCH() trong WHERE mệnh đề.

Trong ví dụ này, tôi không thực sự sử dụng WHERE mệnh đề. Tôi chỉ sử dụng LIMIT mệnh đề giới hạn số lượng kết quả.

SELECT 
  MATCH(title, description) AGAINST('Scientist') AS Relevance,
  title, 
  description
FROM film
LIMIT 15;

Kết quả:

+-------------------+------------------+-----------------------------------------------------------------------------------------------------------------------+
| Relevance         | title            | description                                                                                                           |
+-------------------+------------------+-----------------------------------------------------------------------------------------------------------------------+
| 1.026631474494934 | ACADEMY DINOSAUR | A Epic Drama of a Feminist And a Mad Scientist who must Battle a Teacher in The Canadian Rockies                      |
|                 0 | ACE GOLDFINGER   | A Astounding Epistle of a Database Administrator And a Explorer who must Find a Car in Ancient China                  |
|                 0 | ADAPTATION HOLES | A Astounding Reflection of a Lumberjack And a Car who must Sink a Lumberjack in A Baloon Factory                      |
|                 0 | AFFAIR PREJUDICE | A Fanciful Documentary of a Frisbee And a Lumberjack who must Chase a Monkey in A Shark Tank                          |
|                 0 | AFRICAN EGG      | A Fast-Paced Documentary of a Pastry Chef And a Dentist who must Pursue a Forensic Psychologist in The Gulf of Mexico |
|                 0 | AGENT TRUMAN     | A Intrepid Panorama of a Robot And a Boy who must Escape a Sumo Wrestler in Ancient China                             |
|                 0 | AIRPLANE SIERRA  | A Touching Saga of a Hunter And a Butler who must Discover a Butler in A Jet Boat                                     |
|                 0 | AIRPORT POLLOCK  | A Epic Tale of a Moose And a Girl who must Confront a Monkey in Ancient India                                         |
| 2.053262948989868 | ALABAMA DEVIL    | A Thoughtful Panorama of a Database Administrator And a Mad Scientist who must Outgun a Mad Scientist in A Jet Boat   |
|                 0 | ALADDIN CALENDAR | A Action-Packed Tale of a Man And a Lumberjack who must Reach a Feminist in Ancient China                             |
|                 0 | ALAMO VIDEOTAPE  | A Boring Epistle of a Butler And a Cat who must Fight a Pastry Chef in A MySQL Convention                             |
|                 0 | ALASKA PHANTOM   | A Fanciful Saga of a Hunter And a Pastry Chef who must Vanquish a Boy in Australia                                    |
|                 0 | ALI FOREVER      | A Action-Packed Drama of a Dentist And a Crocodile who must Battle a Feminist in The Canadian Rockies                 |
|                 0 | ALICE FANTASIA   | A Emotional Drama of a A Shark And a Database Administrator who must Vanquish a Pioneer in Soviet Georgia             |
| 1.026631474494934 | ALIEN CENTER     | A Brilliant Drama of a Cat And a Mad Scientist who must Battle a Feminist in A MySQL Convention                       |
+-------------------+------------------+-----------------------------------------------------------------------------------------------------------------------+

Ví dụ 8 - Chế độ Boolean

MySQL cho phép chúng tôi chạy các tìm kiếm toàn văn bản ở chế độ boolean. Để thực hiện việc này, hãy thêm IN BOOLEAN MODE bổ trợ cho truy vấn của bạn.

Chế độ Boolean cho phép bạn sử dụng các toán tử như +- để chỉ định một từ hoặc cụm từ cụ thể phải hay không được xuất hiện.

Trong ví dụ sau, tôi đặt trước mỗi từ một dấu cộng (+ ) để chỉ ra rằng cả hai từ phải có mặt.

SELECT 
  title, 
  description
FROM film
WHERE MATCH(title, description) AGAINST('+Saga +Moose' IN BOOLEAN MODE)
LIMIT 3;

Kết quả:

+------------------------+---------------------------------------------------------------------------------------------+
| title                  | description                                                                                 |
+------------------------+---------------------------------------------------------------------------------------------+
| CAPER MOTIONS          | A Fateful Saga of a Moose And a Car who must Pursue a Woman in A MySQL Convention           |
| DATE SPEED             | A Touching Saga of a Composer And a Moose who must Discover a Dentist in A MySQL Convention |
| DELIVERANCE MULHOLLAND | A Astounding Saga of a Monkey And a Moose who must Conquer a Butler in A Shark Tank         |
+------------------------+---------------------------------------------------------------------------------------------+

Trong ví dụ tiếp theo, tôi thay đổi một trong các dấu cộng thành dấu trừ (- ). Điều này có nghĩa là chỉ những hàng có chứa từ Saga sẽ được trả lại, nhưng chỉ khi chúng không cũng chứa Moose :

SELECT 
  title, 
  description
FROM film
WHERE MATCH(title, description) AGAINST('+Saga -Moose' IN BOOLEAN MODE)
LIMIT 3;

Kết quả:

+------------------+-------------------------------------------------------------------------------------------------+
| title            | description                                                                                     |
+------------------+-------------------------------------------------------------------------------------------------+
| AIRPLANE SIERRA  | A Touching Saga of a Hunter And a Butler who must Discover a Butler in A Jet Boat               |
| ALASKA PHANTOM   | A Fanciful Saga of a Hunter And a Pastry Chef who must Vanquish a Boy in Australia              |
| ARMY FLINTSTONES | A Boring Saga of a Database Administrator And a Womanizer who must Battle a Waitress in Nigeria |
+------------------+-------------------------------------------------------------------------------------------------+

Dấu trừ được sử dụng để loại trừ các kết quả sẽ được trả về. Do đó, nếu tất cả các từ tìm kiếm của chúng tôi có tiền tố là dấu trừ, thì một tập hợp trống sẽ được trả về.

SELECT 
  title, 
  description
FROM film
WHERE MATCH(title, description) AGAINST('-Saga -Moose' IN BOOLEAN MODE)
LIMIT 3;

Kết quả:

Empty set (0.00 sec)

Có nhiều toán tử khác có thể được sử dụng với tìm kiếm boolean, chẳng hạn như ~ , < , > , * , và hơn thế nữa. Để biết thêm thông tin chi tiết về cách sử dụng chế độ boolean, hãy xem tài liệu MySQL cho Tìm kiếm toàn văn bản Boolean.

Ví dụ 9 - Với Mở rộng Truy vấn Blind

Bạn có thể sử dụng WITH QUERY EXPANSION hoặc IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION bổ ngữ để thực hiện mở rộng truy vấn mù. Điều này có thể hữu ích khi cụm từ tìm kiếm rất ngắn và nơi kết quả trả về có thể quá hẹp (do đó loại trừ các tài liệu có liên quan).

Mở rộng truy vấn có thể mở rộng tìm kiếm bằng cách trả về các hàng mà nếu không sẽ không được trả lại. Đặc biệt, nếu một hàng không phù hợp chứa các từ cũng được chứa trong một hàng phù hợp, thì hàng không khớp đó có thể trở thành một hàng phù hợp. Nói cách khác, một hàng không phù hợp vẫn có thể được trả lại, đơn giản vì nó chia sẻ các từ khác với một hàng phù hợp.

Để chứng minh, đây là một tìm kiếm thông thường không có mở rộng truy vấn:

SELECT AlbumId, AlbumName
FROM Albums
WHERE MATCH(AlbumName) AGAINST('Blue' IN NATURAL LANGUAGE MODE);

Kết quả:

+---------+------------+
| AlbumId | AlbumName  |
+---------+------------+
|      13 | Blue Night |
+---------+------------+

Tôi đã nêu rõ ràng IN NATURAL LANGUAGE MODE nhưng đây là chế độ mặc định, vì vậy tôi cũng có thể đã bỏ qua công cụ sửa đổi này nếu tôi chọn.

Và đây là cùng một tìm kiếm với mở rộng truy vấn:

SELECT AlbumId, AlbumName
FROM Albums
WHERE MATCH(AlbumName) AGAINST('Blue' WITH QUERY EXPANSION);

Kết quả:

+---------+-----------------+
| AlbumId | AlbumName       |
+---------+-----------------+
|      13 | Blue Night      |
|      19 | All Night Wrong |
+---------+-----------------+

Trong trường hợp này, hai kết quả được trả về. Lưu ý cách kết quả thứ hai không chứa cụm từ tìm kiếm (blue ). Nhưng nó có chứa từ Night điều này cũng xảy ra trong kết quả đầu tiên. Vì vậy, truy vấn mở rộng được coi là đủ tốt để trở thành một đối sánh.

Tên album có lẽ không phải là một trường hợp sử dụng tốt cho chế độ mở rộng truy vấn. Một trường hợp sử dụng tốt hơn có thể là tìm kiếm nói, cơ sở dữ liệu , trong đó một truy vấn mở rộng cũng có thể trả về các tài liệu chứa các tên như MySQL , Oracle , v.v. ngay cả khi chúng không chứa cụm từ cơ sở dữ liệu .

Đây là một ví dụ khác. Tuy nhiên, ví dụ này sử dụng dấu ngoặc kép để chỉ định rằng toàn bộ cụm từ tìm kiếm phải có mặt.

Nếu chúng tôi thực hiện tìm kiếm mà không có mở rộng truy vấn:

SELECT 
  title, 
  description
FROM film
WHERE MATCH(title, description) AGAINST('"Feminist And a Mad Scientist"')
LIMIT 3;

Kết quả:

+------------------+--------------------------------------------------------------------------------------------------+
| title            | description                                                                                      |
+------------------+--------------------------------------------------------------------------------------------------+
| ACADEMY DINOSAUR | A Epic Drama of a Feminist And a Mad Scientist who must Battle a Teacher in The Canadian Rockies |
+------------------+--------------------------------------------------------------------------------------------------+

Chỉ một kết quả được trả về (đó là kết quả duy nhất chứa toàn bộ cụm từ, chính xác như đã nhập).

Nhưng nếu chúng tôi sử dụng mở rộng truy vấn mù, thì đây là điều sẽ xảy ra:

SELECT 
  title, 
  description
FROM film
WHERE MATCH(title, description) AGAINST('"Feminist And a Mad Scientist"' WITH QUERY EXPANSION)
LIMIT 3;

Kết quả:

+--------------------+------------------------------------------------------------------------------------------------------+
| title              | description                                                                                          |
+--------------------+------------------------------------------------------------------------------------------------------+
| ACADEMY DINOSAUR   | A Epic Drama of a Feminist And a Mad Scientist who must Battle a Teacher in The Canadian Rockies     |
| DINOSAUR SECRETARY | A Action-Packed Drama of a Feminist And a Girl who must Reach a Robot in The Canadian Rockies        |
| VICTORY ACADEMY    | A Insightful Epistle of a Mad Scientist And a Explorer who must Challenge a Cat in The Sahara Desert |
+--------------------+------------------------------------------------------------------------------------------------------+

Hàng đầu tiên giống như khi chúng tôi không sử dụng mở rộng truy vấn. Tuy nhiên, truy vấn sau đó sẽ đi và trả về các hàng chỉ chứa các phần của cụm từ tìm kiếm của chúng tôi. Kết quả này chỉ được giới hạn ở ba vì tôi đã sử dụng LIMIT 3 . Kết quả thực tế lớn hơn nhiều:

SELECT COUNT(*)
FROM film
WHERE MATCH(title, description) AGAINST('"Feminist And a Mad Scientist"' WITH QUERY EXPANSION);

Kết quả:

+----------+
| COUNT(*) |
+----------+
|     1000 |
+----------+

Rất có thể nhiều kết quả trong số đó hoàn toàn không liên quan đến cụm từ tìm kiếm. Do đó, mở rộng truy vấn mù thường hoạt động tốt nhất cho các cụm từ tìm kiếm ngắn hơn.

Để biết thêm thông tin về cách sử dụng mở rộng truy vấn mù, hãy xem tài liệu MySQL:Tìm kiếm toàn văn bản với Mở rộng truy vấn.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chuyển đổi từ datetime của MySQL sang định dạng khác bằng PHP

  2. ADDDATE () so với DATE_ADD () trong MySQL:Sự khác biệt là gì?

  3. Lỗi MySql 150 - Khóa ngoại

  4. Tôi có thể sử dụng lại một trường được tính toán trong một truy vấn CHỌN không?

  5. Làm cách nào để kiểm tra xem một giá trị có phải là số nguyên trong MySQL hay không?