DocumentDB:删除默认索引

时间:2015-11-29 10:39:51

标签: azure azure-cosmosdb

我正在尝试删除为新集合创建的默认索引:

{
  "indexingMode": "lazy",
  "automatic": true,
  "includedPaths": [
    {
      "path": "/*",
      "indexes": [
        {
          "kind": "Range",
          "dataType": "Number",
          "precision": -1
        },
        {
          "kind": "Hash",
          "dataType": "String",
          "precision": 3
        }
      ]
    },
    {
      "path": "/\"_ts\"/?",
      "indexes": [
        {
          "kind": "Range",
          "dataType": "Number",
          "precision": -1
        },
        {
          "kind": "Hash",
          "dataType": "String",
          "precision": 3
        }
      ]
    }
  ],
  "excludedPaths": []
}

据我了解,这将索引每个资源及其子资源中的每个属性。

尝试使用此功能排除所有内容时:

collection.IndexingPolicy.ExcludedPaths.Add(new ExcludedPath
{
    Path = "/*"
});

client.ReplaceDocumentCollectionAsync(collection).Wait();

我在ReplaceDocumentCollectionAsync()上收到以下错误:

  

无法接受索引路径'/ *'。请确保   路径在所有索引路径集中都是唯一的,并且它是有效的。

我希望能够定义自己的自定义索引路径。为此,我需要删除默认索引(索引所有内容)。

更新

我通过将包含分配给空集合并删除所有路径来删除索引:

collection.IndexingPolicy.IncludedPaths = new Collection<IncludedPath>();
collection.IndexingPolicy.ExcludedPaths = new Collection<ExcludedPath>();
collection.IndexingPolicy.ExcludedPaths.Add(new ExcludedPath
{
    Path = "/*"
});

注1:由于某种原因,如果只执行第一个语句,索引策略没有任何变化......并且没有错误。

注2: ExcludePaths最初必须设置为空集合,否则(如果路径已存在)它将检测冲突并抛出错误(执行ReplaceDocumentCollectionAsync时)当然)。

索引文档:

{
  "indexingMode": "lazy",
  "automatic": true,
  "includedPaths": [
    {
      "path": "/\"_ts\"/?",
      "indexes": [
        {
          "kind": "Range",
          "dataType": "Number",
          "precision": -1
        },
        {
          "kind": "Hash",
          "dataType": "String",
          "precision": 3
        }
      ]
    }
  ],
  "excludedPaths": [
    {
      "path": "/*"
    }
  ]
}

我认为/_ts/?路径是强制性的。

2 个答案:

答案 0 :(得分:4)

听起来你几乎已经明白了。为了澄清,$$treeLevelid被视为索引方面的特殊属性。

  • _ts被隐含地视为文档的主键 - 在id中,id将始终使用唯一性进行索引。

  • _ts是文档上次写入(创建或替换)的纪元时间戳,也将始终编入索引。此属性将在索引策略中明确注明。

以下索引政策说明了如何仅对document.prop.subprop属性(以及id_ts)进行索引:

{
  "indexingMode": "consistent",
  "automatic": true,
  "includedPaths": [
    {
      "path": "/prop/subprop/?",
      "indexes": [
        {
          "kind": "Range",
          "dataType": "Number",
          "precision": -1
        },
        {
          "kind": "Range",
          "dataType": "String",
          "precision": -1
        }
      ]
    },
    {
      "path": "/\"_ts\"/?",
      "indexes": [
        {
          "kind": "Range",
          "dataType": "Number",
          "precision": -1
        },
        {
          "kind": "Hash",
          "dataType": "String",
          "precision": 3
        }
      ]
    }
  ],
  "excludedPaths": [
    {
      "path": "/*"
    }
  ]
}

答案 1 :(得分:1)

排除所有内容的简单方法是切换indexingMode:无