Nếu như trước đây chúng ta thường sử dụng tìm kiếm bằng cách query thẳng vào database. Đối với những dữ án nhỏ, ít dữ liệu thì sử dụng cách này cũng được. Nhưng đối với dự án lớn, record nhiều thì đến lúc phải dùng search server riêng, nổi tiếng là Elastic Search (opensource) hoặc dùng cloud service như Algolia…
Algolia là gì?
Algolia là một cloud service phục vụ chuyên cho việc tìm kiếm, việc trả dữ liệu của nó phải nói là siêu nhanh. Algolia cung cấp tìm kiếm theo chỉ mục với các định dạng file JSON
, CSV
hoặc TSV
hoặc sử dụng API để thêm thông tin tìm kiếm được đánh chỉ mục.
Ưu điểm:
- Algolia cung cấp gói miễn phí cho bạn sử dụng.
- Giao diện quản lý dễ sử dụng cho phép bạn theo dõi, truy vết và giám sát các hoạt động tìm kiếm.
- Cung cấp các API Client cho nhiều ngôn ngữ như
JavaScript
,Node.js
,Go
,Php
. - Các thư viện Algolia cung cấp rất hay như Autocomplete, Algolia Places.
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.
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
Fulltext-Search là gì?
Fulltext Search là cách tự nhiên nhất để tìm kiếm thông tin. Hệt như Google, ta chỉ cần gõ từ khóa và nhấn enter thế là có kết quả trả về.
Nhắc đến FullText Search ta không thể không nhắc đến Inverted Index , đây là 1 kĩ thuật index trong database, một kĩ thuật quan trọng trong Fulltext Search. Thế Inverted Index là gì?
Inverted Index là một cấu trúc dữ liệu, nhằm mục đích map giữa các từ hay chữ số và các document chứa chúng.
Kỹ thuật Inverted Index
Để dễ hiểu, các bạn xem ví dụ dưới đây:
Document1 = "Toan is Developer" Document2 = "Developer Php" Document3 = "Toan is Developer and Devops"
Và Inverted Index được lưu như sau:
"Toan" => {Document1,Document3} "is" => {Document1, Document3} "Developer" => {Document1, Document2, Document3} "Php" => {Document2} "and" => {Document3} "Devops" => {Document3}
Cách hoạt động Đầu tiên hệ thống nó sẽ tách chuỗi tìm kiếm ra thành các từ Tam, is, Developer. Sau đó sẽ tìm trong inverted index và được các tập hợp như sau:
{Document1,Document3} {Document1,Document3} {Document1,Document2,Document3}
Sau đó union các tập hợp lại
{Document1,Document3} union {Document1,Document3} union {Document1, Document2, Document3} => {Document1}
Kỹ thuật Fuzzy Search
Fuzzy Seach (tìm kiếm “mờ”) hay còn hay được gọi là Approximate Search (tìm kiếm “xấp xỉ”) là khái niệm để chỉ kỹ thuật để tìm kiếm một xâu “gần giống” (thay vì “giống hệt” ) so với một xâu cho trước.
Nhập: "Ngyen Minh Toan" Kết quả: "Nguyen Minh Toan"
So sánh Substring
Nó giống LIKE trong SQL. Giả sử như người dùng nhập vào xâu “TopDev”, bạn có thể trả về những kết quả có chứa từ “TopDev” như “TopDev Vietnam” , “TopDev Việc Làm IT”
Khoảng cách Levenshtein
Khoảng cách Levenshtein là số bước ít nhất biến một xâu A thành xâu B thông qua 3 phép biến đổi:
- Thêm một ký tự
- Bớt một ký tự
- Thay đổi một ký tự
Cách sử dụng Algolia
Bạn vào link Sử dụng Algolia với Laravel Scout để tham khảo thêm.