Chức năng search có hầu hết trên các website, ứng dụng như tìm kiếm tên người dùng, tên sản phẩm, ...Nó sẽ dễ dàng khi làm việc với SQL (dùng từ khoá LIKE) nhưng trong Firebase không hỗ trợ việc tiềm kiếm chuỗi con, thì chúng ta phải tích hợp bên thứ 3 như ElasticSearch hay Algolia. Tuy nhiên, những nền tảng nền có giá khá cao sau khi được sử dụng miễn phí tới mức nào đó.
Vậy nên trong bài này mình sẽ hướng dẫn cách đơn giản mà hiệu quả nhất để thực hiện chứ năng search này. Sử dụng truy vấn where(field-để-search, 'array-contains', search-text)
Trước tiên, lưu thêm một field trong firestore dựa trên field cần search
Khi muốn tìm kiếm field nào đó thì lúc tạo sẽ thêm 1 field là mảng các từ khoá dựa trên field cần tìm.
Ví dụ: Field name là "công ty Bqsoft" thì tạo thêm field keywords là ['c', 'cô', 'côn', 'công', 'công t', ...]. Lúc này, người dùng tìm kiếm theo field name ta sẽ truy vấn đến field keywords
Cách làm:
const name = 'công ty BQsoft';
const keywords = [];
for (let index = 1; index <= name.length; index++) {
keywords.push(name.substring(0, index).toLowerCase())
}
let body = {
name,
keywords
}
Thực hiện việc tìm kiếm tên công ty
if (search-text) {
db.collection('company').where('keywords', 'array-contains', search-text);
}
Trong đó:
Cần check nếu search-text tồn tại thì mới thực hiện query này.
Lưu ý: Chỉ nên thực hiện phương pháp này cho field ngắn như là tên, không nên dùng cho văn bản lớn như bài viết vì mảng keywords sinh ra sẽ rất lớn ảnh hưởng đến việc lưu dữ liệu trong firestore và hiệu suất khi truy vấn.