06/04/2021, 14:50

Query Expansion Full Text Search trong MySQL - MySQL nâng cao

Trong bài này ta sẽ học một kiến thức rất hay đó là cách mở rộng truy vấn tìm kiếm trong Full Text Search MySQL, dựa trên phản hồi liên quan tự nhiên. * Lưu ý: Để tiện cho việc viết bài thì cụm từ mở rộng truy vấn mình sẽ gọi là query expansion. 1. Hiểu hơn ...

Trong bài này ta sẽ học một kiến thức rất hay đó là cách mở rộng truy vấn tìm kiếm trong Full Text Search MySQL, dựa trên phản hồi liên quan tự nhiên.

* Lưu ý: Để tiện cho việc viết bài thì cụm từ mở rộng truy vấn mình sẽ gọi là query expansion.

1. Hiểu hơn về query expansion trong Full Text Search

Thông thường, người dùng tìm kiếm thông tin dựa trên kiến ​​thức của họ. Họ sử dụng kinh nghiệm của mình để đưa ra các từ khóa để tìm kiếm thông tin và đôi khi, những từ khóa này quá ngắn.

Để giúp người dùng tìm thông tin dựa trên những từ khóa quá ngắn này, công cụ tìm kiếm toàn văn bản MySQL giới thiệu một khái niệm gọi là mở rộng truy vấn.

Việc mở rộng truy vấn được sử dụng để mở rộng kết quả tìm kiếm của các full text search dựa trên phản hồi liên quan (hoặc mở rộng truy vấn mù). Về mặt kỹ thuật, MySQL full text search thực hiện các bước sau khi mở rộng truy vấn được sử dụng:

  • Đầu tiên, tìm kiếm tất cả các hàng khớp với truy vấn tìm kiếm.
  • Thứ hai, tìm các từ có liên quan trong tất cả các hàng từ kết quả tìm kiếm.
  • Thứ ba, tìm kiếm lại dựa trên các từ có liên quan thay vì các từ khóa ban đầu được chỉ định bởi người dùng.

Bạn có thể sử dụng mở rộng truy vấn khi kết quả tìm kiếm quá ít. Bạn thực hiện lại các tìm kiếm với việc mở rộng truy vấn nhằm cung cấp cho người dùng nhiều thông tin liên quan và phù hợp với những gì họ đang tìm kiếm.

Để sử dụng query expansion thì ta sử dụng từ khóa WITH QUERY EXPANSION đặt trong hàm AGAINST (). Dưới đây là minh họa cú pháp của truy vấn bằng cách sử dụng WITH QUERY EXPANSION.

SELECT column1, column2
FROM table1
WHERE MATCH(column1,column2) 
      AGAINST('keyword',WITH QUERY EXPANSION);

2. Ví dụ query expansion trong MySQL

Hãy xem một vài ví dụ sẽ giúp bạn hiểu rõ hơn là đống lý thuyết cồng kềnh phía trên.

Trong ví dụ này chúng ta sẽ sử dụng cột ProductName của bảng products để thử nghiệm tính năng mở rộng truy vấn.

products png

Bước 1: Hãy tạo một full text search vào cột productName.

ALTER TABLE products 
ADD FULLTEXT(productName);

Bước 2: Tìm kiếm với từ khóa 1992, bước này chưa sử dụng query expansion.

SELECT 
    productName
FROM
    products
WHERE
    MATCH (productName) 
    AGAINST ('1992' );

Bạn sẽ nhận được kết quả như sau:

MySQL Query Expansion example png

Như bạn thấy trong kết quả trả về có 2 record bởi vì chỉ có hai dòng này là xuất hiện từ 1992.

Bước 3: Hãy thử sử dụng Query Expansion xem thế nào nhé.

SELECT 
	productName 
FROM 
	products 
WHERE 
	MATCH(productName) 
    AGAINST('1992' WITH QUERY EXPANSION);

MySQL Query Expansion example 2 png

Kết quả trả về nhiều hơn 2 hàng bởi vì ta sử dụng mở rộng tìm kiếm. Hai hàng đầu tiên là tương quan giống nhất nên được xếp lên đầu, các hàng khác chính là phần mở rộng bởi nó chứa những từ nằm trong hai hàng đầu tiên. Ví dụ từ "Ferrari".

Lưu ý rằng kết quả trả về của việc mở rộng tìm kiếm đôi khi có thể không như người dùng mong đợi, nhưng cũng nên khuyến khích sử dụng bởi đó là giải pháp giúp giữ chân khách hàng trên website của mình.

Như vậy là mình đã hướng dẫn xong cách sử dụng mở rộng tìm kiếm WITH QUERY EXPANSION trong MySQL. Đây là một phần kiến thức rất hay và nếu áp dụng vào các ứng dụng website thực tế thì sẽ rất hữu ích.

Bùi Văn Nam

27 chủ đề

7090 bài viết

Cùng chủ đề
0