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
FieldOverride
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 政策
您可以使用 fieldOverrides
数组启用或停用 TTL 政策,如下所示:
// 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) 政策,请参阅官方文档。