Ank*_*jay 4 azure azure-cosmosdb azure-cosmosdb-sqlapi
我正在尝试为 COMOS 中的几个属性定义索引,但我对自动索引有点困惑。根据 Cosmos DB文档:
默认情况下,Azure Cosmos DB 会自动为容器中所有项目的每个属性编制索引,而无需定义任何架构或配置二级索引。
另外,请参考这个:
在某些情况下,您可能希望覆盖此自动行为以更好地满足您的要求。您可以通过设置容器的索引模式来自定义容器的索引策略,并包括或排除属性路径。
从以上几点我了解到,除非我们定义自定义索引策略,否则自动索引设置为true
(这是有道理的)。但是,如果我们paths
为索引定义了自己的包含和排除,否则它应该是false
.
这可能意味着,如果我如下定义容器属性,则该Indexing Policy
Automatic
属性应false
在 Cosmos DB 上设置为。
using Microsoft.Azure.Cosmos; //Azure Cosmos SDK v3.3.1
.
.
var containerProperties = new ContainerProperties
{
Id = "SOME_CONTAINER_NAME",
PartitionKeyPath = "/MY_PARTITION_KEY",
};
containerProperties.IndexingPolicy.IncludedPaths.Add(new IncludedPath {Path = "/\"{MY_PARTITION_KEY}\"/?"});
containerProperties.IndexingPolicy.ExcludedPaths.Add(new ExcludedPath {Path = "/*"});
Run Code Online (Sandbox Code Playgroud)
但是,我看到 CosmosDb 索引的上述配置被定义为automatic
set to true
。
Automatic
property 和IncludedPaths
,ExcludedPaths
属性是否IndexingPolicy
class
无关?如果是这样,什么是automatic
财产的手段,当我们定义IncludedPaths
和ExcludedPaths
对索引的政策?
编辑 1
它变得有点棘手和混乱。即使在将Automatic
属性设置为属性后,false
该属性仍保留true
在门户中。
那就是下面的代码似乎没有任何效果。
containerProperties.IndexingPolicy.Automatic = false;
Run Code Online (Sandbox Code Playgroud)
编辑 2
即使我automatic
从门户更新属性settings
,值也不会改变。而且我也没有收到任何错误。
我来自 CosmosDB 工程团队。“自动”属性和包含/排除路径无关。
大多数容器现在不推荐使用“自动”属性。通过在每个文档级别覆盖索引指令,它可以用于将集合水平隔离为两组文档 - 一组是二级索引的,另一组不是。除了缺乏具体的业务价值外,将自动属性设置为 false 还会导致基于查询是否使用索引(而不是扫描)的查询结果不一致。所以我们现在已经弃用了该属性(它不能设置为 false)。
我们通常所说的“自动索引”是默认情况下对容器中所有文档中的所有路径进行索引。这可以通过默认索引策略在 IncludedPaths 部分中包含 /* (“根”路径下的所有内容)这一事实看出。希望这可以帮助。
归档时间: |
|
查看次数: |
535 次 |
最近记录: |