Giới thiệu về Full Text Search

I. Full text search là gì?

FTS (full text search) là phương pháp tìm kiếm thông tin tự nhiên nhất, giống như Google, chỉ cần nhập từ khóa và nhấn enter để nhận kết quả. Bài viết này giới thiệu một cách ngắn gọn về FTS trong MySQL, không đề cập đến các công cụ FTS như Sphinx hay Solr.

Giới thiệu về Full Text Search image 1

II. Tại sao chúng ta phải dùng Full text search?

Thường, chúng ta sử dụng câu truy vấn sau để tìm kiếm dữ liệu.

SELECT id, title, description FROM book WHERE title LIKE ‘%keyword%’

Tuy nhiên, phương pháp tìm kiếm này gặp một số hạn chế sau:

  • Tìm kiếm trở nên chậm hơn khi không sử dụng chỉ số.
  • Kết quả tìm kiếm quá nhiều, đồng nghĩa của từ quá phức tạp.
  • Tìm kiếm tiếng Việt có dấu và không dấu gặp khó khăn. MySQL có những hạn chế trong việc này, ngay cả full text search cũng không đáp ứng hoàn toàn vấn đề này, phải sử dụng các công cụ tìm kiếm bên ngoài như Solr, Sphinx, v.V.
  • III. Một số đặc tính khi sử dụng full text search:

    Một trong những lợi ích của A là:

  • Có rất nhiều kết quả được trả về khi tìm kiếm.

  • Khi sử dụng chỉ số, tìm kiếm được thực hiện nhanh chóng.
  • Index là một tệp riêng biệt được lưu trữ trên máy chủ và chỉ chứa các trường mà bạn muốn nó chứa. Nếu bạn tạo một Index cho trường user_id (mã số người dùng), MySQL sẽ dễ dàng tìm ra mã số 1 một cách nhanh chóng. Trong ví dụ về quyển sách, khi cần tìm kiếm thông tin, chúng ta thường xem phần “Mục Lục” và tìm từ đó để tăng tốc độ tìm kiếm. Tạo Index này sẽ làm cho cơ sở dữ liệu của bạn hoạt động nhanh hơn đáng kể.

    Giới thiệu về Full Text Search image 2

  • Sử dụng phương pháp tối ưu hơn thay vì sử dụng LIKE khi làm việc với các trường văn bản có kích thước lớn.
  • B. Nhược điểm: Tuy nhiên, có một số điểm chưa hoàn hảo.

  • Độ chính xác không cao.
  • Giới thiệu về Full Text Search image 2

  • Giả sử bạn có một câu truy vấn với mệnh đề LIKE như sau: Title LIKE ‘%one%’. Kết quả trả về có thể bao gồm: one, zone, money, phone. Tuy nhiên, dải kết quả trả về có thể rất rộng và chứa nhiều kết quả không mong muốn.

  • Input: Từ đồng nghĩa (synonyms) Như chúng ta đã biết, mỗi ngôn ngữ đều có những từ có nghĩa tương đương. Ví dụ, trong tiếng Việt, xe hơi và ô tô, bao thư và phong bì là những từ đồng nghĩa. Tiếng Anh cũng có những từ tương tự như color-colour, check-cheque, developer-programmer và nhiều hơn nữa. Tuy nhiên, việc sử dụng các phép toán như LIKE hay = (hoặc cả Full-text search của MySQL) không đủ để giải quyết vấn đề từ đồng nghĩa này.

  • Cấu tạo từ viết tắt (acronym) đôi khi được sử dụng với các cụm từ dài và thông dụng như THPT, CNTT, US, IT. Tuy nhiên, khi người dùng tìm kiếm, họ có thể nhập khác so với cách chúng ta lưu trữ trong cơ sở dữ liệu (viết tắt hoặc viết đầy đủ). Điều này tạo ra một khó khăn trong việc thực hiện chức năng tìm kiếm. Ước mong của người dùng là tìm thấy kết quả mong muốn, bất kể họ viết tắt hay viết đầy đủ.
  • Khi không sử dụng index, tốc độ truy vấn trở nên chậm.
  • Giới thiệu về Full Text Search image 3

    Nếu ta đặt wildcard ‘%’ ở đầu, MySQL sẽ thực hiện câu truy vấn mà không sử dụng index, điều này làm cho câu truy vấn chạy chậm hơn so với việc tìm kiếm trên index. Điều này tương tự như việc tìm từng trang trong một cuốn sách thay vì tìm trong trang index ở cuối cuốn sách.

  • Vấn đề liên quan đến việc tìm kiếm tiếng Việt có dấu và không dấu có một số khó khăn.
  • Giả sử chúng ta lưu trữ tiếng Việt có dấu trong cơ sở dữ liệu, nhưng nếu người dùng nhập tiếng Việt không dấu, thì mệnh đề LIKE chắc chắn sẽ không tìm thấy dữ liệu mà chúng ta cần.

    Có một số cách giải quyết, ví dụ như lưu 2 trường dữ liệu: một trường có dấu và một trường không dấu. Tuy nhiên, phương pháp này không hiệu quả và không hỗ trợ tìm kiếm gần đúng. Khi người dùng nhập “co be mua dong”, câu truy vấn LIKE sẽ không tìm thấy “Cô bé mùa Đông”, nhưng FTS có thể giải quyết vấn đề này.

    IV. Tổng kết:

    Bài viết đã trình bày tổng quan về Full Text Search Engine và giới thiệu một số tính năng của nó. Khi bạn nhập một câu lệnh tìm kiếm vào ô tìm kiếm của Google, bạn có thể hình dung được một phần quá trình xảy ra sau đó (mặc dù thực tế việc Google làm sẽ phức tạp hơn rất nhiều).

    Recommended For You

    About the Author: Nguyễn Văn Sỹ

    Tôi là Nguyễn Văn Sỹ có 15 năm kinh nghiệm trong lĩnh vực thiết kế, thi công đồ nội thất; với niềm đam mê và yêu nghề tôi đã tạo ra những thiết kếtuyệt vời trong phòng khách, phòng bếp, phòng ngủ, sân vườn... Ngoài ra với khả năng nghiên cứu, tìm tòi học hỏi các kiến thức đời sống xã hội và sự kiện, tôi đã đưa ra những kiến thức bổ ích tại website nhaxinhplaza.vn. Hy vọng những kiến thức mà tôi chia sẻ này sẽ giúp ích cho bạn!