в запросе используется очень высокая кодовая точка в диапазоне 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?Есть ли у вас какие-либо другие идеи по выполнению фильтра шаблонов над коллекцией пожарных?

Ответы на вопрос(1)

Ваш ответ на вопрос