firestore firebase Если вы попытаетесь выполнить любой из следующих запросов, вы почти наверняка столкнетесь с проблемами.
Field1 = A и Field2 = A
или
Field1 = A и Field2 = B и Field7 = D
, так как общее количество составных индексов равно 200, если вы пытаетесь создать составные индексы с каждымкомбинация в.
Тем не менее, мои первоначальные тесты показывают, что вы можете сделать следующее.
Создать составной индекс с полями от 1 до 9.
Это будет использоваться для удовлетворения всехпоиски, содержащие эти поля (если у вас нет других полей в списке предложений .where).
Вы также должны соответствовать критериям DESCENDING OR ASCENDING, если вы также используете order_by, но так каквы смотрите на точное совпадение, это не должно иметь значения.
Это работает, потому что firestore разумно использует составные индексы и ищет индекс, в котором есть все поля и тот факт, что в нем большеЭто не имеет значения, поскольку в предложении .where не указывается какой-либо конкретный порядок для этих полей, и, следовательно, можно использовать существующий индекс.
Если вы ищете слияние Индекса (близко к основанию), это объясняется.
https://firebase.google.com/docs/firestore/query-data/index-overview
Что касается программного создания и удаления индексов, то теперь это стало более возможным, чем в конце прошлого года.
Можно выгружать существующие составные индексы вфайл, использующий инструмент firebase https://firebase.google.com/docs/cli/
Если вы выполните инициализацию firebase и выберете индексы и правила firestore, то в результате в текущей папке / каталоге будет создан файл с именем firestore.indexes.json, которыйвключает в себя все составные индексы пожарного магазина, а также все исключения.Я бы порекомендовал сделать резервную копию этого файла, так как он может быть использован для воссоздания индексов, если вы что-то напутали.
Этот файл можно добавить, а затем команду
firebase deploy --only firestore: indexes
добавит все составные индексы в файл (будут созданы новые и их можно будет увидеть в консоли Firebase на вкладке индексы).Существующие не будут затронуты.
Это не меняет ограничения в 200 составных индексов.Существует также ограничение в 100 полей в списке предложений .where, включая поля order_by.
Вы также можете удалять индексы с помощью gcloud SDK.Для получения инструкций обратитесь к следующей странице.
https://cloud.google.com/sdk/install
Убедитесь, что вы выбрали beta в списке параметров установки.
Этохорошее начало для изучения параметров gcloud
https://cloud.google.com/sdk/gcloud/reference/
На следующей странице описано, как создать индекс.
https://cloud.google.com/sdk/gcloud/reference/beta/firestore/indexes/composite/create
КакНапример,
gcloud beta firestore indexes composite create \
--collection-group=Events \
--field-config field-path=tags,array-config=contains \
--field-config field-path=user_id,order=descending \
--field-config field-path=timestamp,order=descending
См. ссылку для дополнительных флагов, которые можно использовать.
Просто имейте в виду, что выполнение этой команды заблокирует командную строку до завершения создания индекса, и это может занять5 или 10 минут или даже дольше.Если вам нужно добавить много индексов, было бы неплохо запустить их в качестве фоновой команды для каждой из них, чтобы не выполнять однопоточную обработку 100 команд создания индекса.
gcloud может бытьиспользуется для создания составных индексов, а также для удаления составных индексов, хотя их можно удалить только по идентификатору.
Это можно найти с помощью команды
gcloud beta составной список бета-версий индексов
+--------------+---------------------+-------------+-------+------------------------------+------------+--------------+
| NAME | COLLECTION_GROUP | QUERY_SCOPE | STATE | FIELD_PATHS | ORDER | ARRAY_CONFIG |
+--------------+---------------------+-------------+-------+------------------------------+------------+--------------+
| CICAgJjUt4gK | MyCollection | COLLECTION | READY | fieldStatus | ASCENDING | |
| | | | | lastupdatedTimestamp | DESCENDING | |
Чтобы просто получить значение имени, выполните следующую команду
Составной список бета-версий индексов бета-версии gcloud --format = "value (name)" --filter = "FIELD_PATHS: Field1"
Это предоставит список составных имен индексов, которые затем можно будет использовать для подачи в команду удаления, где индекс включает имя поля «Field1».
Удаление можно выполнить с помощью имени(CICAgJjUt4gK в этом примере), перечисленный вышеупомянутой командой, используя следующую команду удаления
gcloud -q --account=by@email.address --project = proj-a73464 бета-версии индексов брандмауэра композитное удаление CICAgJjUt4gK
где --account - адрес электронной почты, зарегистрированный для проекта firebase, и --project name - это имя вашего проекта, а -q означает «тихий».Эти параметры ДОЛЖНЫ быть в начале команды.
Индексы удаляются намного быстрее, чем они создаются, поэтому, если вы продолжаете обновлять представление составного индекса консоли firestore, вы должны увидеть, что счетчик идет вниз.
Для создания индексов используйте
композитный индекс бета-версии gcloud firestore create --collection-group = COLLECTION_GROUP --field-config = FIELD_CONFIG [--async] [GCLOUD_WIDE_FLAG…]
для создания.Найдите параметры этой команды, но они будут аналогичны команде delete.