+4

Full-Text Search trong PostgreSQL - Phần 1

Phần 1. Giới thiệu về Full-Text Search

1.1. Full-Text Search trong Databases

Full-Text Search là kĩ thuật tìm kiếm trên "Full Text Database", nghĩa là tìm kiếm trên cơ sở dữ liệu chứa "toàn bộ" các kí tự( text) của một hoặc một số các tài liệu, bài báo...( document), hoặc là của Websites.

Trong phần đầu tiên mình sẽ giới thiệu về định nghĩa của FTS, tổng quan về FTS trong PostgreSQL.

1.1.1. Giới thiệu

Chắc hẳn các bạn đã từng dùng qua một kĩ thuật tìm kiếm rất cơ bản, đó là thông qua câu lệnh LIKE của SQL.

SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern;

Sử dụng LIKE, các bạn sẽ chỉ phải tìm kiếm ở column đã định trước, do đó lượng thông tin phải tìm giới hạn lại chỉ trong các column đó. Câu lệnh LIKE cũng tương đương với việc bạn matching pattern cho "từng" chuỗi của từng dòng( rows) của field tương ứng, do đó về độ phức tạp sẽ là tuyến tính với số dòng, và số kí tự của từng dòng, hay chính là "toàn bộ kí tự chứa trong field cần tìm kiếm". Do đó sử dụng LIKE query sẽ có 2 vấn đề:

  1. Chỉ search được trong row đã định trước.
  2. Performance không tốt.

Như vậy chúng ta cần một kĩ thuật tìm kiếm khác, tốt hơn LIKE query, mềm dẻo hơn, tốt về performance hơn, đó chính là Full-Text Search.

1.1.2. Tổng quan về FTS trong PostgreSQL

Tiền xử lý:

Parse document to lexemes: Nó rất hữu ích để phân biệt các loại lexemes, ví dụ, chữ số, chữ, từ phức tạp, địa chỉ, email...

Áp dụng các quy định về ngôn ngữ để bình thường hóa lexemes về dạng nguyên thể của nó. Ví dụ các từ "see", "saw", "seen" thì đều đưa về dạng nguyên thể là see để lưu trữ.

Lưu trữ kết quả xử lý 1 cách tối ưu để tìm kiếm nhanh hơn, ví dụ sắp xếp lại mảng kết quả xử lý...


> ### Các bạn đón đọc các phần tiếp theo của mình nhé, sẽ rất thú vị đấy :3.

All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.