6 điểm bởi GN⁺ 2023-07-13 | 1 bình luận | Chia sẻ qua WhatsApp
  • PostgreSQL cung cấp các thành phần để tự xây dựng một công cụ tìm kiếm
  • Các thành phần chính gồm kiểu dữ liệu tsvectortsquery, toán tử khớp @@, các hàm xếp hạng kết quả khớp và kiểu chỉ mục GIN
  • tsvector lưu trữ từ vựng đã được chuẩn hóa và vị trí của chúng trong văn bản gốc
  • tsquery biểu diễn truy vấn đã được chuẩn hóa và có thể kết hợp nhiều thuật ngữ bằng các toán tử logic
  • Kiểu chỉ mục GIN được dùng để truy vấn tsvector hiệu quả
  • ts_rankts_rank_cd là các hàm xếp hạng có xét đến tần suất thuật ngữ và độ gần nhau
  • Có thể tùy biến kết quả tìm kiếm theo các tiêu chí cụ thể bằng cách điều chỉnh độ liên quan
  • Có thể thêm các hệ số tăng cường cho số, ngày tháng và giá trị chính xác vào điểm xếp hạng
  • Có thể gán trọng số cho các cột để ưu tiên một số thuật ngữ nhất định trong kết quả tìm kiếm
  • Dùng setweight cho cột tiêu đề sẽ cải thiện thứ hạng của các tiêu đề phim có chứa từ "jedi"
  • PostgreSQL không trực tiếp hỗ trợ tìm kiếm mờ hoặc chấp nhận lỗi gõ, nhưng có thể triển khai bằng độ tương tự hoặc khoảng cách Levenshtein
  • Tìm kiếm theo facet, giúp người dùng thu hẹp phạm vi tìm kiếm, có thể được triển khai trong PostgreSQL bằng cách định nghĩa danh mục hoặc dùng thuật toán
  • Bài viết kết lại bằng việc đề cập rằng phần 2 sẽ đi sâu so sánh chi tiết với Elasticsearch

1 bình luận

 
GN⁺ 2023-07-13
Ý kiến Hacker News
  • Mong chờ phần 2 so sánh PostgreSQL và Elasticsearch
  • Tôi đã đánh giá thấp công sức cần thiết để đồng bộ PostgreSQL và Elasticsearch cho CRUD và tìm kiếm.
  • Công cụ tìm kiếm cần tốc độ truy vấn nhanh. Đây không chỉ là điều quan trọng trên lý thuyết.
  • Với các thuật toán CS cơ bản và việc tận dụng phần cứng, có thể dễ dàng tạo ra cơ sở dữ liệu và công cụ tìm kiếm cơ bản.
  • Tính chủ quan của tìm kiếm là thách thức lớn nhất.
  • Postgres có thể kết hợp với pgvector để tìm nội dung liên quan thông qua embedding.
  • Tìm kiếm bên trong Postgres gây tải CPU lớn, và cập nhật giao dịch nên được ưu tiên.
  • Các cụm ES và Solr chạy với mức sử dụng CPU cao trong quá trình lập chỉ mục lại.
  • Các extension của PG cho tìm kiếm, recursive join và vector rất thú vị và đơn giản cho các side project.
  • SQLite cũng cung cấp các tính năng lập chỉ mục nâng cao và stemming.
  • Bài viết trừu tượng hóa business logic vào cơ sở dữ liệu, nhưng không đề cập đến các trade-off.
  • Tôi đang cân nhắc chạy một công cụ tìm kiếm tùy chỉnh cho các trang đã được đánh dấu.
  • Tôi tò mò không biết nên chọn Postgres/Elasticsearch hay một giải pháp thương mại.
  • Từ "nâng cao" được xem là một chỉ dấu tích cực.