Пожарный указатель на картах и ​​массивах - уточнение - PullRequest
0 голосов
/ 12 мая 2019

Я пытаюсь понять, как Firestore создает индексы для полей. Учитывая приведенный ниже пример документа, как создаются индексы, особенно для карт / массивов?

enter image description here

Я прочитал документацию по Типы индексов в Cloud Firestore несколько раз, и я все еще не уверен. Там написано:

Автоматическая индексация По умолчанию Cloud Firestore автоматически поддерживает индексы для одного поля для каждого поля в документе и каждого подполя на карте. Cloud Firestore использует следующие параметры по умолчанию для индексов с одним полем:

  • Для каждого поля, не являющегося массивом и не относящимся к карте, Cloud Firestore определяет два индекса одного поля области сбора данных, один в восходящем режиме и один в нисходящем.

  • Для каждого поля карты Cloud Firestore создает один восходящий индекс области действия коллекции и один нисходящий индекс для каждого подполя, не являющегося массивом и не относящегося к карте.

  • Для каждого поля массива в документе Cloud Firestore создает и поддерживает индекс содержимого массива области сбора.

  • Индексы для одного поля с областью действия группы сбора по умолчанию не поддерживаются.

Если я правильно понимаю, тогда для каждого из этих полей будет создан индекс, даже для значений в массиве alternate_names.

Так что, если я хочу найти любой документ, в котором fields.alternate_names содержит значение (например) "Caofang", то Firestore будет использовать индекс для поиска

Правильно ли мое предположение / понимание?

1 Ответ

1 голос
/ 12 мая 2019

Нет, ваше понимание неверно.fields.alternate_names - это подполе массива в поле карты, что означает, что оно не удовлетворяет требованиям во второй точке.Вы можете проверить свои предположения, просто выполнив запрос.Если запрос не выполнен, вы увидите в сообщении об ошибке, что он не выполнен из-за отсутствия индекса.

Firestore просто не допустит запросы, которые не проиндексированы.Сообщение об ошибке этого сбоя будет содержать ссылку на консоль, которая позволит вам создать индекс, необходимый для этого запроса, если это возможно.

Если вы хотите иметь возможность запрашивать содержимое fields.alternate_names, рассмотрите возможность размещения его в собственном поле верхнего уровня, которое будет проиндексировано по умолчанию.

...