范围索引以编程方式预先存在的集合

时间:2015-07-13 22:45:48

标签: azure azure-cosmosdb

我已经创建了一个包含集合的数据库。该集合包含数千个预先存在的文档,类似于下面的示例。

cv2.boundingRect

我知道我需要使用范围类型索引数据库,以便我可以使用范围查询&订单功能与我的数据。

那么,我如何使用.NET SDK以编程方式对预先存在的数据进行范围索引?

我想出了以下代码。但是,它似乎在查询集合时失败了。当我插入断点时,'database'在查询集合时包含null。

{
 "Town": "Hull",
 "Easting": 364208,
 "Northing": 176288,
 "Longitude": -2.5168477762,
 "Latitude": 51.4844052488,
}

1 个答案:

答案 0 :(得分:3)

今天,索引政策是不可改变的;因此,您需要重新创建一个集合来更改索引策略(例如添加范围索引)。

如果您想以编程方式创建具有自定义索引策略的集合,执行此操作的代码将如下所示:

var rangeDefault = new DocumentCollection { Id = "rangeCollection" };

rangeDefault.IndexingPolicy.IncludedPaths.Add(
    new IncludedPath { 
        Path = "/*", 
        Indexes = new Collection<Index> { 
            new RangeIndex(DataType.String) { Precision = -1 }, 
            new RangeIndex(DataType.Number) { Precision = -1 }
        }
    });

await client.CreateDocumentCollectionAsync(database.SelfLink, rangeDefault);   

然后编写一些代码来从现有集合中读取数据,并将数据写入新集合。

但这有点麻烦......

作为替代解决方案......我强烈建议使用DocumentDB Data Migration Tool使用新索引策略创建新集合,并将数据从旧集合移动到新集合。迁移成功完成后,您可以删除旧集合。

您可以下载数据迁移工具here

第1步:将DocumentDB定义为源:

DocumentDB Source

第2步:将DocumentDB定义为目标,并使用新的索引策略:

DocumentDB Target

提示:您可以右键单击索引策略输入框以选择索引策略

DocumentDB Indexing Policies

将为您提供如下所示的索引编制策略:

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

第3步:运行导入作业...

提醒:导入成功完成后删除旧集合。