Справочник по определению индекса Cloud Firestore

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) ознакомьтесь с официальной документацией .