Firestore автоматически создает однополевые индексы для всех полей в ваших документах ( Подробнее ). Это означает, что простые запросы будут работать прямо из коробки.
Таким образом, такой запрос должен дать вам результат, который вы ищете: любое место, отсортированное по категориям в алфавитном порядке. И это работает, потому что вы запрашиваете только одно поле.
placesCollectionRef.order(by: "category", descending: false)
Но часто вы хотите сопоставить одно поле и отсортировать по другое. И в этом случае вам понадобится составной индекс.
placesCollectionRef
.whereField("state", isEqualTo: "CA")
.order(by: "category", descending: false)
Firebase очень помогает определить, когда нам нужен индекс. Если вы выполните тестовый запуск своего приложения, Firebase выдаст ошибку, если был какой-либо запрос, в котором отсутствовал необходимый индекс. Сообщение об ошибке будет содержать URL, который ссылается на консоль проекта Firebase и открывает диалоговое окно для создания индекса.