Live Search với Algolia

Chúng ta có thể làm tính năng search đơn giản trong Rails sử dụng gem như "Ransack". Cách này tận dụng khả năng có sẵn của truy vấn SQL, phù hợp với các trang web nhỏ. Với các ứng dụng lớn, search server độc lập là một giải pháp tốt hơn. Bạn có thể:

  • Cài đặt search server của riêng mình, sử dụng các mã nguồn mở như Solr hay Elastic Search
  • Sử dụng cloud service như AWS Cloud Search hay Algolia

Mặc dù các mã nguồn mở ngày nay đã trở nên dễ dàng tiếp cận hơn rất nhiều so với trước đây (cài đặt, tài liệu, cộng đồng, v.v.) nhưng đôi khi việc cài đặc khá là mất thời gian và phiền phức khi maintain. Trong trường hợp bạn có tiền, sử dụng cloud service là một lựa chọn hợp lý, lúc đó bạn chỉ cần tương tác với API, quên đi các vấn đề về bảo mật, lưu trữ,...

Cloud Service cho search luôn là một thử thách trong những năm gần đây vì phần lớn các giải pháp đưa ra đều khá nghèo nàn. Cloud Search của Amazon là một ví dụ điển hình. API và giao diện điều khiển phức tạp và thiếu hiệu quả.

Một dịch vụ realtime cloud search đang được quan tâm là Algolia.

Ưu điểm của Algolia search:

  • Giao diện quản lý web đẹp và dễ tương tác
  • Docs và tutorial chi tiết, API tương tác đơn giản
  • Hỗ trợ mạnh mẽ cho Rails & Heroku

Nhược điểm:

  • Đắt tiền
  • Live search sử dụng public API key trên javascript ở client, điều này có lẽ dễ dẫn đến tình trạng bị những kẻ xấu lợi dụng tấn công tiêu tốn chi phí API

Bạn có thể bắt đầu với việc đăng kí ở Algolia. Gói free của Algolia cho phép 1000 records và 50000 operation một tháng. Bạn có thể tạo nhiều app với free package.

Hướng dẫn chi tiết cho Algolia trên Rails có thể xem tại đây: https://devcenter.heroku.com/articles/algoliasearch

Hướng dẫn cho Live Search trên front end có thể xem tại đây: https://github.com/algolia/instant-search-demo

Một số lưu ý:

  • Không nên tạo Algolia search account từ Heroku addons vì search instance tạo ra sẽ có base region là US, latency cao. Hãy tạo app từ giao diện web của Algolia với region là Hongkong (Singapore latency cao hơn một chút)
  • Mặc dù có thể config để tạo các index cho các môi trường cùng trên một search instance, việc này là không nên, hãy tạo các search instance khác nhau cho các môi trường khác nhau

Demo: https://safe-stream-3923.herokuapp.com/