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

Cách hoạt động của MATCH AGAINST trong MariaDB

Trong MariaDB, MATCH AGAINST là một cấu trúc đặc biệt được sử dụng để thực hiện tìm kiếm toàn văn trên một chỉ mục toàn văn.

Cú pháp

Cú pháp như sau:

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

Ví dụ

Giả sử chúng ta có một bảng được gọi là Products bao gồm các dữ liệu sau:

+----+---------------------------------+-----------------------------------------+
| Id | ProductName                     | ProductDescription                      |
+----+---------------------------------+-----------------------------------------+
|  1 | Left handed screwdriver         | Purple. Includes left handed carry box. |
|  2 | Right handed screwdriver        | Blue. Includes right handed carry box.  |
|  3 | Long Weight (blue)              | Approximate 45 minute waiting period.   |
|  4 | Long Weight (green)             | Approximate 30 minute waiting period.   |
|  5 | Sledge Hammer                   | Wooden handle. Free wine glasses.       |
|  6 | Chainsaw                        | Orange. Includes spare fingers.         |
|  7 | Straw Dog Box                   | Tied with vines. Very chewable.         |
|  8 | Bottomless Coffee Mugs (4 Pack) | Brown ceramic with solid handle.        |
+----+---------------------------------+-----------------------------------------+

Bảng này có một chỉ mục toàn văn trên ProductDescription của nó cột. Điều đó có nghĩa là chúng ta có thể sử dụng MATCH AGAINST để thực hiện tìm kiếm toàn văn đối với cột đó.

Ví dụ:

SELECT 
    ProductId AS "Id",
    ProductName,
    ProductDescription
FROM Products 
WHERE MATCH(ProductDescription) AGAINST('includes')
ORDER BY ProductId ASC;

Kết quả:

+----+--------------------------+-----------------------------------------+
| Id | ProductName              | ProductDescription                      |
+----+--------------------------+-----------------------------------------+
|  1 | Left handed screwdriver  | Purple. Includes left handed carry box. |
|  2 | Right handed screwdriver | Blue. Includes right handed carry box.  |
|  6 | Chainsaw                 | Orange. Includes spare fingers.         |
+----+--------------------------+-----------------------------------------+

Nhận điểm

Chúng tôi có thể bao gồm MATCH AGAINST trong SELECT danh sách để trả về điểm phù hợp của từ khóa trong / các cột được tìm kiếm:

SELECT 
    ProductDescription,
    MATCH(ProductDescription) AGAINST ('includes') AS Score
FROM Products 
WHERE MATCH(ProductDescription) AGAINST ('includes')
ORDER BY Score DESC;

Kết quả:

+-----------------------------------------+---------------------+
| ProductDescription                      | Score               |
+-----------------------------------------+---------------------+
| Orange. Includes spare fingers.         |  0.4883610010147095 |
| Blue. Includes right handed carry box.  |  0.4883610010147095 |
| Purple. Includes left handed carry box. | 0.48305025696754456 |
+-----------------------------------------+---------------------+

Trong trường hợp này, chúng tôi cũng sử dụng ORDER BY mệnh đề sắp xếp theo điểm số theo thứ tự giảm dần (tức là phù hợp nhất trước).

Các cột không có chỉ mục toàn văn bản

Lý do khiến ví dụ trước hoạt động là vì trước đó tôi đã tạo chỉ mục toàn văn trên ProductDescription cột. Nếu tôi không làm điều này, tôi sẽ nhận được lỗi.

Đây là những gì sẽ xảy ra khi chúng tôi cố gắng sử dụng MATCH AGAINST chống lại cột không có chỉ mục toàn văn:

SELECT 
    ProductId,
    ProductName,
    ProductPrice
FROM Products 
WHERE MATCH(ProductName) AGAINST('screwdriver')
ORDER BY ProductId ASC;

Kết quả:

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

Hãy thêm một chỉ mục toàn văn vào ProductName cột:

ALTER TABLE Products
ADD FULLTEXT(ProductName);

Bây giờ hãy chạy lại truy vấn:

SELECT 
    ProductId,
    ProductName,
    ProductPrice
FROM Products 
WHERE MATCH(ProductName) AGAINST('screwdriver')
ORDER BY ProductId ASC;

Kết quả:

+-----------+--------------------------+--------------+
| ProductId | ProductName              | ProductPrice |
+-----------+--------------------------+--------------+
|         1 | Left handed screwdriver  |        25.99 |
|         2 | Right handed screwdriver |        25.99 |
+-----------+--------------------------+--------------+

Lần này nó đã hoạt động.

Chỉ mục toàn văn bản trên nhiều cột

Chúng tôi có thể thêm các chỉ mục toàn văn trên nhiều cột.

Ví dụ:

ALTER TABLE Products
ADD FULLTEXT(ProductName, ProductDescription);

Bây giờ chúng ta có thể chạy MATCH AGAINST chống lại chỉ mục toàn văn đó.

SELECT 
    ProductId AS Id, 
    ProductName, 
    ProductDescription
FROM Products 
WHERE MATCH(ProductName, ProductDescription) AGAINST ('weight')
OR MATCH(ProductName, ProductDescription) AGAINST ('ceramic')
ORDER BY Id ASC;

Kết quả:

+----+---------------------------------+---------------------------------------+
| Id | ProductName                     | ProductDescription                    |
+----+---------------------------------+---------------------------------------+
|  3 | Long Weight (blue)              | Approximate 45 minute waiting period. |
|  4 | Long Weight (green)             | Approximate 30 minute waiting period. |
|  8 | Bottomless Coffee Mugs (4 Pack) | Brown ceramic with solid handle.      |
+----+---------------------------------+---------------------------------------+


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Khắc phục “ERROR 1250 (42000):Không thể sử dụng bảng‘… ’từ một trong các SELECT trong mệnh đề ORDER” trong MariaDB

  2. Quản lý cơ bản MaxScale bằng cách sử dụng MaxCtrl cho MariaDB Cluster - Phần thứ hai

  3. 2 cách liệt kê tất cả các hàm trong MariaDB

  4. Cách cài đặt, bảo mật và điều chỉnh hiệu suất của máy chủ cơ sở dữ liệu MariaDB

  5. Cách BIT_LENGTH () hoạt động trong MariaDB