в запросе используется очень высокая кодовая точка в диапазоне Unicode (это код зоны частного использования [PUA]). Поскольку это после большинства обычных символов в Юникоде, запрос соответствует всем значениям, которые начинаются с
аюсь выполнить фильтр по шаблону над коллекцией 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?Есть ли у вас какие-либо другие идеи по выполнению фильтра шаблонов над коллекцией пожарных?