Я пытаюсь выполнить фильтрацию по шаблону над коллекцией Firestore.Например, в моей базе данных Firestore есть бренд под названием adidas
.У пользователя будет поисковый ввод, в котором ввод «adi», «adid», «adida» или «adidas» возвращает документ adidas
.Я указал несколько решений для этого:
1. Получите все документы и выполните внешний фильтр
var brands = db.collection("brands");
filteredBrands = brands.filter((br) => br.name.includes("pattern"));
Это решение, очевидно, не подходит из-за цены Firestore.Более того, запрос может быть довольно долгим, если количество документов велико.
2. Использование Elasticsearch или Algolia
Это может быть интересно.Однако я думаю, что немного излишне добавлять поддержку этих решений только для поиска по шаблону, а также это может быстро стать дорогим.
3. Пользовательское поле searchName
при создании объекта
Итак, у меня было такое решение: при создании документа создайте поле с массивом возможных шаблонов поиска:
{
...
"name":"adidas",
"searchNames":[
"adi",
"adida",
"adidas"
],
...
}
, чтобы документможно получить доступ с помощью:
filteredBrands = db.collection("brands").where("searchNames", "array-contains", "pattern");
Итак, у меня было несколько вопросов:
- Что вы думаете о значимости и эффективности этого третьего решения?Как вы думаете, насколько это может быть лучше, чем использование стороннего решения в качестве Elasticsearch или Algolia?
- Есть ли у вас какие-либо другие идеи по выполнению фильтрации шаблонов по коллекции в пожарном хранилище?