Bài viết


Cách đơn giản nhất để search full text trong Firebase

Ngày đăng: 31/07/2024

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"công ty Bqsoft" thì tạo thêm field keywords ['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
}


2.Tìm kiếm sử dụng khoá array-contains


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 đó:

  • keywords: field thêm vào ở trên
  • array-contains: từ khoá tìm kiếm, trả về record nào có search-text nằm trong mảng keywords
  • search-text: text người dùng tìm kiếm


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.

Liên hệ ngay tại đây với chúng tôi để được tư vấn nhanh nhất hoặc liên hệ:

Hotline: 0705.550.553

Email: bqsoftvn@gmail.com

Fanpage: https://www.facebook.com/bqsoftvn


Hân hạnh được hợp tác!

icon zalo
icon-mess