COMOS DB 中的自动索引

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 索引的上述配置被定义为automaticset to trueAzure 门户上的索引策略

Automaticproperty 和IncludedPaths,ExcludedPaths属性是否IndexingPolicy class无关?如果是这样,什么是automatic财产的手段,当我们定义IncludedPathsExcludedPaths对索引的政策?

编辑 1

它变得有点棘手和混乱。即使在将Automatic属性设置为属性后,false该属性仍保留true在门户中。

那就是下面的代码似乎没有任何效果。

containerProperties.IndexingPolicy.Automatic = false;
Run Code Online (Sandbox Code Playgroud)

编辑 2

即使我automatic从门户更新属性settings,值也不会改变。而且我也没有收到任何错误。

Kri*_*ram 7

我来自 CosmosDB 工程团队。“自动”属性和包含/排除路径无关。

大多数容器现在不推荐使用“自动”属性。通过在每个文档级别覆盖索引指令,它可以用于将集合水平隔离为两组文档 - 一组是二级索引的,另一组不是。除了缺乏具体的业务价值外,将自动属性设置为 false 还会导致基于查询是否使用索引(而不是扫描)的查询结果不一致。所以我们现在已经弃用了该属性(它不能设置为 false)。

我们通常所说的“自动索引”是默认情况下对容器中所有文档中的所有路径进行索引。这可以通过默认索引策略在 IncludedPaths 部分中包含 /* (“根”路径下的所有内容)这一事实看出。希望这可以帮助。

  • 另外,我认为最好更新文档以更好地解释这一点。 (2认同)