Thứ Tư, 26 tháng 7, 2023

Hàm MATCH và AGAINST trong MySQL

Trong bài học này mình sẽ giới thiệu thuật ngữ Natural Language Full-Text Searches, bằng cách sử dụng hai hàm MATCH() and AGAINST() trong MySQL.

Trong kỹ thuật tìm kiếm Full Text Search, MySQL tìm kiếm các hàng hoặc tài liệu có liên quan đến truy vấn ngôn ngữ tự nhiên của văn bản một cách tự do. MySQL tính toán mức độ liên quan dựa trên các yếu tố khác nhau bao gồm số lượng từ trong tài liệu, số lượng từ duy nhất trong tài liệu, tổng số từ trong collection và số lượng tài liệu (hàng) có chứa một từ cụ thể.

Để thực hiện tìm kiếm toàn văn bản bằng tìm kiếm tự nhiên ta sử dụng các hàm MATCH() và AGAINST(). Hàm MATCH () chỉ định cột nơi bạn muốn tìm kiếm và hàm AGAINST() xác định biểu thức tìm kiếm sẽ được sử dụng.

Mục lục

  • 1. Cách sử dụng hàm MATCH () và AGAINST ()
  • 2. Sắp xếp kết quả trả về dựa vào mức độ liên quan

1. Cách sử dụng hàm MATCH () và AGAINST ()

Trước khi bắt đầu thì ta hãy tạo một table có cấu trúc như sau:

Bài viết này được đăng tại tranvanbinh.vn

products png

Sau đó mình tạo Index Full Text Search cho cột productLine.

1
2
ALTER TABLE products
ADD FULLTEXT(productline);

Tiếp theo, để truy vấn tìm kiếm cho cột này bằng kỹ thuật Full Text Search thì ta sử dụng hai hàm trên như sau:

1
2
3
4
5
6
7
SELECT
    productName,
    productLine
FROM products
WHERE
    MATCH(productLine)
    AGAINST('Classic');

Kết quả trả về là những record mà cột productLine có xuất hiện từ Classic.

MySQL Natural Language Full Text Search png

Để tìm theo hai từ Classic hoặc Vintage thì ta sẽ ngăn cách nó bằng dấu phẩy.

1
2
3
4
5
6
7
8
SELECT
    productName,
    productLine
FROM products
WHERE
    MATCH(productline)
    AGAINST('Classic,Vintage')
ORDER BY productName;

Kết quả:

MySQL Natural Language Full Text Search example png

Hàm AGAINST() theo mặc định sẽ nằm ở chế độ IN NATURAL LANGUAGE MODE, đầy là các chế độ mà ta sẽ được học ở bài tiếp theo.

Bạn có thể xác định chế độ này một cách tường minh bằng cách thêm từ khóa IN NATURAL LANGUAGE MODE vào tham số thứ hai của hàm.

1
2
3
4
5
6
7
SELECT
    productName,
    productLine
FROM products
WHERE
    MATCH(productline)
    AGAINST('Classic,Vintage' IN NATURAL LANGUAGE MODE)

Theo mặc định, MySQL thực hiện tìm kiếm theo kiểu không phân biệt chữ hoa chữ thường. Tuy nhiên bạn có thể sử dụng tìm kiếm kiểu binary collation cho cột index thì sẽ phân biệt được.

2. Sắp xếp kết quả trả về dựa vào mức độ liên quan

Một tính năng rất quan trọng trong việc xử lý tìm kiếm đó là sắp xếp kết quả trả về theo thứ tự: tài liệu nào giống nhiều nhất thì nằm trên cùng, giống ít nhất thì nằm dưới cùng.

Khi bạn sử dụng hàm MATCH() ở lệnh WHERE thì MySQL sẽ trả về giá trị có mức độ liên quan lên đầu tiên.

Hãy xem ví dụ dưới đây để hiểu rõ hơn. Mình đã tạo một Index Full Text Search cho field productName.

1
2
ALTER TABLE products
ADD FULLTEXT(productName);

Tiếp theo mình muốn truy vấn tìm kiếm trên field này, bằng hai từ khóa Ford hoặc 1932 hoặc có cả hai.

1
2
3
4
5
6
7
SELECT
    productName,
    productLine
FROM products
WHERE
    MATCH(productName)
    AGAINST('1932,Ford');

Kết quả xuât hiện như sau:

MySQL Natural Language Full text search Sort The Result set By Relevance png

Những kết quả xuất hiện cả hai từ cùng lúc sẽ được ưu tiên đặt trên cùng, tiếp theo là những record chỉ xuất hiện 1 từ.

Tóm lai, bạn cần lưu ý những vấn đề sau khi làm việc với full text search trong MySQL:

  • Độ dài tối thiểu cho từ cần tìm là 4. Ví dụ bạn tìm từ "và" hoặc "tôi" thì mặc định MySQL sẽ xác định đó là những từ vô nghĩa. Vì trong tiếng Anh những từ có 3 chữ cái đều là vô nghĩa. Tuy nhiên bạn có thể mở file /etc/mysql/my.cnf và tìm đến dòng ft_min_word_len = 3 chỉnh lại số mong muốn.
  • Có một số từ Stop Words sẽ bị bỏ qua nằm trong file storage/myisam/ft_static.c. Bạn muốn thay đổi thì hãy vào file đó nhé.

Như vậy là mình đã hướng dẫn xong cách sử dụng hai hàm MATCH và AGAINST để truy vấn Full Text Search trong MySQL. Chúc các bạn thực hiện thành công, hẹn gặp lại ở bài tiếp theo.

=============================
* KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE trực tiếp từ tôi giúp bạn bước đầu trở thành những chuyên gia DBA, đủ kinh nghiệm đi thi chứng chỉ OA/OCP, đặc biệt là rất nhiều kinh nghiệm, bí kíp thực chiến trên các hệ thống Core tại VN chỉ sau 1 khoá học.
* CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
* Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile/Zalo: 0902912888
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: https://www.youtube.com/@binhguru
👨 Tiktok: https://www.tiktok.com/@binhguru
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhguru
👨 Podcast: https://www.podbean.com/pu/pbblog-eskre-5f82d6
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội

=============================
Hàm MATCH và AGAINST trong MySQL, oracle tutorial, học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,sql tutorial, khóa học pl/sql tutorial, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail,oracle RAC, ASM, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, postgresql tutorial, mysql tutorial, mariadb tutorial, ms sql server tutorial, nosql, mongodb tutorial, oci, cloud, middleware tutorial, hoc solaris tutorial, hoc linux tutorial, hoc aix tutorial, unix tutorial, securecrt, xshell, mobaxterm, putty

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master