Это невозможно с использованием обычных запросов Cloud Firestore, если вы хотите остаться вменяемым (не хотите запускать запросы для каждой возможной комбинации).
Как вы справедливо указали, если бы вы запросили array-contains
, используя каждое слово из вашей строки поиска , вы не получили бы никаких результатов, потому что ни один из документов не содержит всеслова из поисковой строки и тому подобное.
На самом деле для сложных случаев, подобных этому, от команды Cloud Firestore есть рекомендация.В документации имеется раздел «Решения» , в котором представлены решения для распространенных проблем, которые не поддерживаются архитектурой Cloud Firestore.
В этом случае вам следует рассмотреть «Поиск»решение , которое указывает на стороннее лицо под названием Algolia .
Полное раскрытие : Я не "настроил это для себя, чтобы посмотреть, сколько работы ему требуется, сколько это может стоить, и действительно ли это работает так, как я] ожидаем "(цитата Дуг Стивенсон ).Я ожидаю, что вы сами подумаете, какое решение лучше всего подойдет для вашего случая.
Сервис в основном позволяет сохранять данные на их серверах для выполнения более сложных запросов оттуда.В статье из документации объясняется, как это настроить.
Собственная альтернатива Cloud Firestore
Теоретически можно выполнять запросы для каждого отдельного слова изтвоя строкаВы должны запустить цикл, который перебирает все слова и выполняет array-contains
для каждого из них.Теперь вы можете захотеть убедиться, что эта операция не чувствительна к регистру.Это потребует от вас, по крайней мере, вдвое большего количества запросов от исходного очень большого числа.Кроме того, вам придется отслеживать, какие документы совпадают, какие запросы объединять их на стороне клиента.