Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure cosmosdb DocumentDB创建额外索引_Azure Cosmosdb - Fatal编程技术网

Azure cosmosdb DocumentDB创建额外索引

Azure cosmosdb DocumentDB创建额外索引,azure-cosmosdb,Azure Cosmosdb,我已经创建了一个分区集合,其中需要在DateTime字段(如ISO-8601)上使用范围索引,在其他一些字段上使用散列索引。这些是我将只对其进行筛选的字段,因此我不需要对任何其他字段进行索引 我已经这样定义了我的索引(使用扩展方法): 奇怪的是,当我检查索引策略时,我可以看到创建了很多对我来说毫无意义的额外索引。请参阅下面的定义和我的评论 [{ "path" : "/playerId/?", "indexes" : [{ "kind" : "Hash",

我已经创建了一个分区集合,其中需要在DateTime字段(如ISO-8601)上使用范围索引,在其他一些字段上使用散列索引。这些是我将只对其进行筛选的字段,因此我不需要对任何其他字段进行索引

我已经这样定义了我的索引(使用扩展方法):

奇怪的是,当我检查索引策略时,我可以看到创建了很多对我来说毫无意义的额外索引。请参阅下面的定义和我的评论

[{
    "path" : "/playerId/?",
    "indexes" : [{
            "kind" : "Hash",
            "dataType" : "Number",
            "precision" : 3
        }, {
            "kind" : "Hash",
            "dataType" : "String", <<< It created an extra String Hash index
            "precision" : 3
        }
    ]
}, {
    "path" : "/category/?",
    "indexes" : [{
            "kind" : "Hash",
            "dataType" : "String",
            "precision" : 3
        }, {
            "kind" : "Range",
            "dataType" : "Number", <<< It created an extra Number Range index, this field is not numeric and I wanted a String Hash index only
            "precision" : -1
        }
    ]
}, {
    "path" : "/dateTime/?",
    "indexes" : [{
            "kind" : "Range",
            "dataType" : "String",
            "precision" : -1
        }, {
            "kind" : "Range",
            "dataType" : "Number", <<< It created an extra Number Range index, this field is not numeric and I wanted a String Range index only
            "precision" : -1
        }
    ]
}, {
[{
“路径”:“/playerId/?”,
“索引”:[{
“种类”:“散列”,
“数据类型”:“编号”,
“精度”:3
}, {
“种类”:“散列”,
“数据类型”:“字符串”,
它为什么要创建这些索引

我们可能会从Azure官方那里得到答案

默认情况下,DocumentDB使用哈希索引对文档中的所有字符串属性进行索引,并使用范围索引对数值属性进行索引

根据我的理解,如果我们想为属性创建索引,它将确保有一个字符串散列索引,或者如果我们不是由自己创建的,则会有一个范围号

例如:

IndexingPolicy = new IndexingPolicy(new RangeIndex(DataType.Number) 
该指数将是:

"indexes" : [{
            "kind" : "Hash",
            "dataType" : "String",
            "precision" : 3
        }, {
            "kind" : "Range",
            "dataType" : "Number",
            "precision" : -1
        }
它为什么要创建这些索引

我们可能会从Azure官方那里得到答案

默认情况下,DocumentDB使用哈希索引对文档中的所有字符串属性进行索引,并使用范围索引对数值属性进行索引

根据我的理解,如果我们想为属性创建索引,它将确保有一个字符串散列索引,或者如果我们不是由自己创建的,则会有一个范围号

例如:

IndexingPolicy = new IndexingPolicy(new RangeIndex(DataType.Number) 
该指数将是:

"indexes" : [{
            "kind" : "Hash",
            "dataType" : "String",
            "precision" : 3
        }, {
            "kind" : "Range",
            "dataType" : "Number",
            "precision" : -1
        }

我曾希望有可能告诉它不要创建我不需要的索引,但不幸的是,情况似乎并非如此。此外,您似乎无法在同一数据类型上创建哈希和范围索引。例如,如果您尝试创建哈希字符串+范围字符串,它将抛出异常。实际上,这个答案并没有回答“为什么”部分。是的,应用了默认值,但不清楚这个从未使用过的索引的目的是什么。我曾希望可以告诉它不要创建我不需要的索引,但不幸的是,情况似乎并非如此。此外,您似乎无法在同一数据类型上创建哈希和范围索引。例如,如果您尝试创建哈希字符串+范围字符串,它将引发异常。实际上,此答案不回答“为什么”部分。是的,应用了默认值,但不清楚此从未使用过的索引的目的是什么。