Azure cosmosdb DocumentDB创建额外索引
我已经创建了一个分区集合,其中需要在DateTime字段(如ISO-8601)上使用范围索引,在其他一些字段上使用散列索引。这些是我将只对其进行筛选的字段,因此我不需要对任何其他字段进行索引 我已经这样定义了我的索引(使用扩展方法): 奇怪的是,当我检查索引策略时,我可以看到创建了很多对我来说毫无意义的额外索引。请参阅下面的定义和我的评论Azure cosmosdb DocumentDB创建额外索引,azure-cosmosdb,Azure Cosmosdb,我已经创建了一个分区集合,其中需要在DateTime字段(如ISO-8601)上使用范围索引,在其他一些字段上使用散列索引。这些是我将只对其进行筛选的字段,因此我不需要对任何其他字段进行索引 我已经这样定义了我的索引(使用扩展方法): 奇怪的是,当我检查索引策略时,我可以看到创建了很多对我来说毫无意义的额外索引。请参阅下面的定义和我的评论 [{ "path" : "/playerId/?", "indexes" : [{ "kind" : "Hash",
[{
"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
}
我曾希望有可能告诉它不要创建我不需要的索引,但不幸的是,情况似乎并非如此。此外,您似乎无法在同一数据类型上创建哈希和范围索引。例如,如果您尝试创建哈希字符串+范围字符串,它将抛出异常。实际上,这个答案并没有回答“为什么”部分。是的,应用了默认值,但不清楚这个从未使用过的索引的目的是什么。我曾希望可以告诉它不要创建我不需要的索引,但不幸的是,情况似乎并非如此。此外,您似乎无法在同一数据类型上创建哈希和范围索引。例如,如果您尝试创建哈希字符串+范围字符串,它将引发异常。实际上,此答案不回答“为什么”部分。是的,应用了默认值,但不清楚此从未使用过的索引的目的是什么。