我正在更改Cosmos DB的索引,但是它无法正常运行,因为它应该是

时间:2018-11-18 14:25:13

标签: azure azure-cosmosdb azure-cosmosdb-sqlapi

我正在使用Azure SQL API,并且我的数据以以下方式构造:

{
"deviceId": "123_123",
"comms": 0,
"engineSpdEnc": 0,
"currentTime": 1542185998605,
"deviceName": "mydevice2",
"siteId": 0,
"messageType": 2,
"data": {

    "v5B3Freq": 0,
    "v5B3Amp": 0,
    "v5B4Freq": 0,
    "v5B4Amp": 0,
    "v5B5Freq": 0,
    "v5B5Amp": 0,
    "v6B6Freq": 0,
    "v6B6Amp": 0,
    "v6B7Freq": 0,
    "v6B7Amp": 0,
    "inletPres": 0
},
"EventProcessedUtcTime": "2018-11-14T09:01:42.6897624Z",
"PartitionId": 1,
"EventEnqueuedUtcTime": "2018-11-14T08:59:58.645Z",
"IoTHub": {
    "MessageId": null,
    "CorrelationId": null,
    "ConnectionDeviceId": "device1",
    "ConnectionDeviceGenerationId": "636758197942626855",
    "EnqueuedTime": "2018-11-14T08:59:58.649Z",
    "StreamId": null
},
"id": "1734dd0c-1bb5-d424-4946-e2c957bb3858",
"_rid": "lblPAOEu3xYCAAAAAAAAAA==",
"_self": "dbs/lblPAA==/colls/lblPAOEu3xY=/docs/lblPAOEu3xYCAAAAAAAAAA==/",
"_etag": "\"08008e15-0000-0000-0000-5bebe47c0000\"",
"_attachments": "attachments/",
"_ts": 1542186108    }

通过使用Azure门户,我已将索引策略从默认更改为以下内容:

{
"indexingMode": "lazy",
"automatic": false,
"includedPaths": [
    {
        "path": "/*",
        "indexes": [
            {
                "kind": "Range",
                "dataType": "Number",
                "precision": 3
            },
            {
                "kind": "Range",
                "dataType": "String",
                "precision": 3
            },
            {
                "kind": "Spatial",
                "dataType": "Point"
            }
        ]
    }
],
"excludedPaths": [
    {
        "path": "/data/*"
    }
]
}

因此,我禁用了自动索引策略,并排除了/data/*中的路径,这意味着 如果我要查询:

select * from c where c.data.v6B7Amp = 0

由于c.data.pressure没有索引,它应该什么也不会返回,但是我得到的所有记录都应该在其中。

是因为我正在使用Azure门户更改索引还是其他任何东西?

3 个答案:

答案 0 :(得分:1)

首先,除非有理由,否则不需要关闭automatic索引编制或将indexingMode设置为lazy

看来,即使排除了路径,平等检查也可以工作。 当您尝试对该字段执行诸如order by之类的操作时,排除的路径就会出现。

以下是使用数据数据和索引策略的示例:

enter image description here

答案 1 :(得分:0)

从索引中排除路径时,查询将回退以对集合中的所有文档进行全面扫描以过滤结果。这就是您看到查询结果的原因。

答案 2 :(得分:0)

应为"path": "/data/?"问号是指路径的特定值,而星号表示通配符确定的一条或多条路径。