1

我正在使用 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 门户来更改索引还是其他什么?

4

3 回答 3

1

首先,您不需要关闭automatic索引或将其设置indexingModelazy,除非您有理由这样做。

即使排除了路径,似乎也可以进行相等检查。当您尝试order by针对该字段执行类似操作时,排除路径将起作用。

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

在此处输入图像描述

于 2018-11-19T09:42:12.020 回答
1

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

于 2018-11-19T20:48:57.977 回答
0

应该是"path": "/data/?"问号是指路径的具体值,而星号代表一个或多个由通配符确定的路径。

于 2019-06-20T21:55:09.093 回答