Cosmos DB 中的索引旨在提供快速灵活的查询性能,无论数据如何发展。 浏览这些示例索引策略,了解如何根据 Cosmos DB 中的工作负荷定制索引。 每个示例都演示了一种不同的方法来控制哪些属性被索引,以及如何索引和为什么。
为所有属性编制索引(默认值)
此策略为每个项中的每个属性编制索引,这是默认行为。 它提供最大的查询灵活性。
{
"indexingMode": "consistent",
"includedPaths": [
{
"path": "/*"
}
],
"excludedPaths": [
{
path: '/_etag/?'
}
]
}
从索引中排除属性
此策略为除特定属性之外的所有属性编制索引,如果不需要查询该属性,可降低存储和写入成本。
{
"indexingMode": "consistent",
"includedPaths": [
{
"path": "/*"
}
],
"excludedPaths": [
{
path: '/_etag/?'
},
{
"path": "/nonIndexedProperty/?"
}
]
}
仅索引特定属性
此策略仅对指定的属性执行索引,这可以提高写入性能和减少存储(如果仅查询数据的子集)。
{
"indexingMode": "consistent",
"includedPaths": [
{
"path": "/name/?"
},
{
"path": "/address/city/?"
}
],
"excludedPaths": [
{
path: '/_etag/?'
},
{
"path": "/*"
}
]
}
使用空间索引
此策略演示如何对地理空间数据使用空间索引。
{
"indexingMode": "consistent",
"includedPaths": [
{
"path": "/*"
},
{
"path": "/location/?",
"indexes": [
{
"kind": "Spatial",
"dataType": "Point"
}
]
}
],
"excludedPaths": [
{
path: '/_etag/?'
}
]
}
使用复合索引
此策略添加一个复合索引来优化对多个属性进行筛选或排序的查询。
{
"indexingMode": "consistent",
"includedPaths": [
{
"path": "/*"
}
],
"excludedPaths": [
{
path: '/_etag/?'
}
]
"compositeIndexes": [
[
{
"path": "/category/?",
"order": "ascending"
},
{
"path": "/timestamp/?",
"order": "descending"
}
]
]
}
禁用索引
此策略禁用容器的索引,这对于无需查询数据且仅使用点读取操作来获取数据的写入密集型工作负荷非常有用。
{
"indexingMode": "none"
}
矢量索引策略
此策略对命名的属性启用向量索引, /vectors 用于存储该项的嵌入内容 /vectors。 这样就可以使用 512 维的float32矢量进行余弦距离的高效相似性搜索。
{
"vectorEmbeddings": [
{
"path": "/vectors",
"dataType": "float32",
"distanceFunction": "cosine",
"dimensions": 512
},
]
}
全文索引策略
此策略使用英语分析为全文搜索配置你命名的属性, /text 该属性允许高效的文本搜索查询。
{
"defaultLanguage": "en-US",
"fullTextPaths": [
{
"path": "/text",
"language": "en-US"
}
]
}
包含排除的系统属性的全文索引
此策略启用对属性/text的全文索引,同时将系统属性_etag排除在索引之外。
{
"indexingMode": "consistent",
"automatic": true,
"includedPaths": [
{
"path": "/*"
}
],
"excludedPaths": [
{
"path": "/\"_etag\"/?"
},
],
"fullTextIndexes": [
{
"path": "/text"
}
]
}
基于多个属性的全文索引
此策略使用英语语言分析在/text1和/text2属性上启用全文索引,从而允许跨多个字段进行高效的文本搜索查询。
{
"defaultLanguage": "en-US",
"fullTextPaths": [
{
"path": "/text1",
"language": "en-US"
},
{
"path": "/text2",
"language": "en-US"
}
]
}
混合搜索的示例全文和矢量策略
此策略结合了全文和矢量索引以实现混合搜索功能,从而允许在同一容器中高效文本和矢量相似性查询。
{
"indexingMode": "consistent",
"automatic": true,
"includedPaths": [
{
"path": "/*"
}
],
"excludedPaths": [
{
"path": "/\"_etag\"/?"
},
{
"path": "/vectors/*"
}
],
"fullTextIndexes": [
{
"path": "/text"
}
],
"vectorIndexes": [
{
"path": "/vectors",
"type": "DiskANN"
}
]
}