Я изменяю индексацию базы данных Cosmos, но она не работает так, как это должно быть - PullRequest
0 голосов
/ 18 ноября 2018

Я использую 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 голосов
/ 19 ноября 2018

Если путь исключен из индексации, запрос откатится, чтобы выполнить полное сканирование всех документов в коллекции для фильтрации результатов. Вот почему вы видите результаты по вашему запросу.

0 голосов
/ 21 июня 2019

Это должно быть "path": "/data/?" Знак вопроса относится к конкретному значению пути, тогда как звездочка представляет один или несколько путей, как определено подстановочным знаком.

0 голосов
/ 19 ноября 2018

Во-первых, вам не нужно отключать индексирование automatic или устанавливать indexingMode на lazy, если только у вас нет для этого причины.

Похоже, проверки на равенство могут работать, даже еслипуть исключен.Когда исключенный путь сработает, вы попытаетесь сделать что-то вроде order by для этого поля.

Вот пример, использующий ваши данные и политику индексации:

enter image description here

...