Azure CosmosDb:按订单项需要范围索引

时间:2017-10-30 12:25:33

标签: azure azure-cosmosdb

我通过Azure门户"查询资源管理器"执行简单查询。

这是我的问题:

SELECT * FROM c
WHERE c.DataType = 'Fruit' 
AND c.ExperimentIdentifier = 'prod' 
AND c.Param = 'banana' 
AND Contains(c.SampleDateTime, '20171029')
ORDER BY c.SampleDateTime DESC

然而,我得到例外:

  

按订单项要求在相应的索引路径上定义范围索引。

没有关于错误的帮助链接,我无法从错误消息中找到尾标。

这是什么意思,为什么我的查询失败了,我该如何解决?

P.S。 _ts属性对我不利,因为我不想在插入记录时订购。

1 个答案:

答案 0 :(得分:5)

ORDER BY直接从索引提供,因此它要求按项目排序为Range索引(而不是Hash索引)。

虽然你只能将order-by项目作为范围索引(对于数字和字符串),我的建议是将所有路径索引为范围,精度为-1。

基本上,您需要更新集合的索引策略,如下所示:

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