Tìm hiểu về Tìm kiếm toàn văn trong MySQL

Tìm hiểu về Tìm kiếm toàn văn trong MySQL

Nếu các bạn đã từng giải quyết bài toán tìm kiếm dữ liệu khi lập trình PHP – MySQL thì không thể nào không biết mệnh đề LIKE trong câu lệnh WHERE phải không nào? Tuy nhiên, khi sử dụng mệnh đề LIKE chúng ta chỉ có thể tìm kiếm được những bản ghi mà nội dung trong trường chỉ định phải chứa chính xác cụm từ truyền vào, vì vậy nếu chúng ta nhập một cụm từ dài thì khó có thể mà tìm được bản ghi như ý muốn.

Trong MySQL chúng ta có thể sử dụng một tính năng có tên gọi là Full Text Search (Tìm kiếm toàn văn) để có một giải pháp tìm kiếm bản ghi tối ưu hơn cho ứng dụng của mình. Ở bài viết trước Tìm hiểu về các Storage Engine trong MySQL mình có giới thiệu cho các bạn về các Storage Engine trong MySQL thì chỉ có duy nhất một engine là MyISAM hỗ trợ tính năng này. Vì vậy các bạn cần lưu ý chọn Storage Engine là MyISAM mới có thể sử dụng tính năng Full Text Search cho trường dữ liệu cần truy vấn nhé!.

Tìm hiểu về Full Text Search

Tìm hiểu về Full Text Search

Full Text Search hoạt động như thế nào?

Khi bạn sử dụng Full Text Search để tìm kiếm, chuỗi nội dung truyền vào của bạn sẽ được băm thành các từ đơn, sau đó tiến hành tìm kiếm các bản ghi có chứa những từ đó. Sau đó MySQL sẽ tiến hành xếp hạng theo các tiêu chí ví dụ như: được xuất hiện nhiều lần, các từ nằm gần nhau để cấu thành một chuỗi chứa trong tiêu chí tìm kiếm, …. Sau đó hệ thống sẽ trả ra danh sách kết quả, những bản ghi có độ chính xác nhất sẽ được xếp lên đầu.

Ví dụ tìm: Full text search như thế nào?

Thì bạn ghi trả về sẽ là: Full Text Search hoạt động như thế nào?

Nếu sử dụng LIKE thì chỉ khi nào có một bản ghi có chứa “Full text search như thế nào?” thì mới có bản ghi để trả về.

Hướng dẫn lập chỉ mục 

Để có thể tạo chỉ mục tìm kiếm cho table, các bạn có thể sử dụng phpMyAdmin để đánh Index Full Text như hình sau:

Lập chỉ mục Full Text cho trường dữ liệu

Lập chỉ mục Full Text cho trường dữ liệu

Hướng dẫn truy vấn tìm kiếm dữ liệu trường sử dụng FTS

Để có thể sử dụng Full Text Search để lấy được những bản ghi có chứa nội dung gần chính xác với tiêu chí tìm kiếm. Các bạn cần kết hợp với WHERE của SQL như sau:

WHERE MATCH(field) AGAINST (‘string’)

  • Trong đó field là tên của trường dữ liệu cần tìm kiếm đã được đánh chỉ mục Full Text
  • string là chuỗi nội dung đầu vào cần tìm kiếm để so khớp

Câu lệnh ví dụ

Thiết lập tham số ft_min_word_len

ft_min_word_len là một tham số cấu hình của MySQL dành cho cơ chế hoạt động của Full Text Search. Mặc định MySQL chỉ chấp nhận tìm kiếm các từ >= 4 ký tự trong một chuỗi tìm kiếm mà bạn nhập vào. Vì vậy để tăng khả năng chấp nhận các từ có độ dài nhỏ hơn chúng ta phải thiết lập tham số này để có thể tìm kiếm chính xác hơn nhờ FTS.

Để thiết lập được tham số này, các bạn mở tập tin php.ini là tập tin để thiết lập cấu hình của MySQL. Sau đó ở dưới dòng [mysqld] thì các bạn thêm dòng sau:

ft_min_word_len = 2

Sau đó tiến hành restart service MySQL là sẽ thành công!.

Thiết lập tham số FT Min Word Len

Thiết lập tham số FT Min Word Len

Những lưu ý khi sử dụng Full Text Search

  • Cần phải sử dụng Storage Engine là MyISAM cho table có chứa field sử dụng Index Full Text
  • Để tìm kiếm chính xác hơn tham số ft_min_word_len nên đặt từ 4 về 2 để chấp nhận những từ >= 2 ký tự

Lời kết

Tìm kiếm toàn văn là một tính năng mạnh mẽ của MySQL để giúp ứng dụng của bạn được trang bị một công nghệ tìm kiếm dữ liệu mạnh mẽ hơn. Nhờ cơ chế ranking (xếp hạng) của FTS, ứng dụng của bạn sẽ tìm ra được những bản ghi có độ chính xác xếp theo thứ tự giảm dần có sự giống với công cụ tìm kiếm Google hiện nay. Hi vọng với bài viết này của mình, các bạn sẽ có thêm những kiến thức bổ ích cho việc học tập và công việc của mình!