我注意到CosmosDB关于使用索引的奇怪行为。
对我的设置说几句话:
它是一个分区的CosmosDB,有25个分区
有两个包含字符串的数组字段,名为 a 和 f 。他们有以下索引政策:
{
"path": "/a/[]/?",
"indexes": [
{
"kind": "Hash",
"dataType": "String",
"precision": -1
},
{
"kind": "Range",
"dataType": "Number",
"precision": -1
}
]
},
{
"path": "/f/[]/?",
"indexes": [
{
"kind": "Hash",
"dataType": "String",
"precision": -1
},
{
"kind": "Range",
"dataType": "Number",
"precision": -1
}
]
}
可能存在这样的情况:一个文档的字段 a 中的字符串出现在另一个文档的 f 中。
执行以下查询时会出现奇怪的行为:
SELECT *
FROM Documents d
WHERE ARRAY_CONTAINS(d.a, 'some-string')
如果在任何其他文档的 f 字段中没有出现'some-string',则所有parition的IndexHitRation都为1(如回复中包含的QueryMetrics中所示)。这是我期望的行为。
但如果在任何其他文档的 f 字段中确实出现'some-string',则包含此类文档的分区会报告IndexHitRatio为0,这对使用的RU有很大影响。
我的设置中是否会出现导致此行为的错误?
任何其他人都可以重现这种行为,所以这是一个错误吗?
答案 0 :(得分:0)
为了摆脱这种行为,我为每个字段使用了不同的精度值。所以,现在字段 a 的精度为-1,字段 f 的精度为7。
我的结论是,当使用相同的精度时,它们被写入相同的索引。但这会是数据库的一些意外行为吗?!