Cloud Firestore автоматически создает индексы для поддержки наиболее распространенных типов запросов, но позволяет вам определять собственные индексы и переопределения индексов, как описано в руководствах Cloud Firestore .
Вы можете создавать, изменять и развертывать пользовательские индексы в консоли Firebase или с помощью CLI. В CLI отредактируйте файл конфигурации индекса с именем файла по умолчанию firestore.indexes.json
и разверните его с помощью команды firebase deploy
.
Вы можете экспортировать индексы с помощью CLI, используя firebase firestore:indexes
.
Файл конфигурации индекса определяет один объект, содержащий массив indexes
и необязательный массив fieldOverrides
. Вот пример:
{
// Required, specify compound and vector indexes
indexes: [
{
collectionGroup: "posts",
queryScope: "COLLECTION",
fields: [
{ fieldPath: "author", arrayConfig: "CONTAINS" },
{ fieldPath: "timestamp", order: "DESCENDING" }
]
},
{
collectionGroup: "coffee-beans",
queryScope: "COLLECTION",
fields: [
{
fieldPath: "embedding_field",
vectorConfig: { dimension: 256, flat: {} }
}
]
}
],
// Optional, disable indexes or enable single-field collection group indexes
fieldOverrides: [
{
collectionGroup: "posts",
fieldPath: "myBigMapField",
// We want to disable indexing on our big map field, and so empty the indexes array
indexes: []
}
]
}
Развертывание конфигурации индекса
Разверните конфигурацию индекса с помощью команды firebase deploy
. Если вы хотите развернуть индексы только для баз данных, настроенных в вашем проекте, добавьте флаг --only firestore
. См. справочник параметров для этой команды .
Чтобы просмотреть развернутые индексы, запустите команду firebase firestore:indexes
. Добавьте флаг --database=<databaseID>
чтобы получить список индексов для базы данных, отличной от базы данных вашего проекта по умолчанию.
Если вы вносите изменения в индексы с помощью консоли Firebase, обязательно обновите локальный файл индексов. Дополнительную информацию об управлении индексами см. в руководствах Cloud Firestore .
Формат JSON
Индексы
Схема для одного объекта в массиве indexes
выглядит следующим образом. Необязательные свойства обозначаются знаком ?
характер.
Обратите внимание, что поля документа Cloud Firestore можно индексировать только в одном режиме, поэтому объект поля может содержать только одно из свойств order
, arrayConfig
и vectorConfig
.
collectionGroup: string // Labeled "Collection ID" in the Firebase console
queryScope: string // One of "COLLECTION", "COLLECTION_GROUP"
fields: array
fieldPath: string
order?: string // One of "ASCENDING", "DESCENDING"; excludes arrayConfig and vectorConfig properties
arrayConfig?: string // If this parameter used, must be "CONTAINS"; excludes order and vectorConfig properties
vectorConfig?: object // Indicates that this is a vector index; excludes order and arrayConfig properties
dimension: number // The resulting index will only include vectors of this dimension
flat: {} // Indicates the vector index is a flat index
Переопределения полей
Схема одного объекта в массиве fieldOverrides
выглядит следующим образом. Необязательные свойства обозначаются знаком ?
характер.
Обратите внимание, что поля документа Cloud Firestore можно индексировать только в одном режиме, поэтому объект поля не может содержать одновременно свойства order
и arrayConfig
.
collectionGroup: string // Labeled "Collection ID" in the Firebase console
fieldPath: string
ttl?: boolean // Set specified field to have TTL policy and be eligible for deletion
indexes: array // Use an empty array to disable indexes on this collectionGroup + fieldPath
queryScope: string // One of "COLLECTION", "COLLECTION_GROUP"
order?: string // One of "ASCENDING", "DESCENDING"; excludes arrayConfig property
arrayConfig?: string // If this parameter used, must be "CONTAINS"; excludes order property
Политика TTL
Политику TTL можно включить или отключить с помощью массива fieldOverrides
следующим образом:
// Optional, disable index single-field collection group indexes
fieldOverrides: [
{
collectionGroup: "posts",
fieldPath: "ttlField",
ttl: "true", // Explicitly enable TTL on this Field.
// Disable indexing so empty the indexes array
indexes: []
}
]
Чтобы сохранить в поле индексацию по умолчанию и включить политику TTL:
{
"fieldOverrides": [
{
"collectionGroup": "yourCollectionGroup",
"fieldPath": "yourFieldPath",
"ttl": true,
"indexes": [
{ "order": "ASCENDING", "queryScope": "COLLECTION_GROUP" },
{ "order": "DESCENDING", "queryScope": "COLLECTION_GROUP" },
{ "arrayConfig": "CONTAINS", "queryScope": "COLLECTION_GROUP" }
]
}
]
}
Для получения дополнительной информации о политиках времени жизни (TTL) ознакомьтесь с официальной документацией .