Политика индексирования не создается вместе с коллекцией в базе данных Cosmos. - PullRequest
0 голосов
/ 27 мая 2019

Я пишу сценарий создания базы данных с использованием Java SDK, и политика индексирования не создается должным образом (и задокументировано ).

  • Используется JAVA SDK: com.microsoft.azure:azure-documentdb:2.4.0
  • Эмулятор Azure Cosmos DB 2.2.2 для Windows
  • Текущая установка Cosmos DB на портале Azure с учетной записью SQL

Я создаю запрос на создание коллекции с помощью JAVAбиблиотека и результат (перед фактическим запросом) выглядит следующим образом (DocumentCollection::toJson()):

{
    "uniqueKeyPolicy": {},
    "partitionKey":
    {
        "kind": "Hash",
        "paths": ["/playerId"]
    },
    "indexingPolicy":
    {
        "indexingMode": "Consistent",
        "automatic": true,
        "includedPaths": [
            {
                "path": "/gameId/?",
                "indexes": [
                    {
                        "kind": "Range",
                        "dataType": "String"
                    }
                ]
            },
            {
                "path": "/playerId/?",
                "indexes": [
                    {
                        "kind": "Range",
                        "dataType": "String"
                    }
                ]
            },
            {
                "path": "/date/*",
                "indexes": [
                    {
                        "kind": "Range",
                        "dataType": "String"
                    }
                ]
            }
        ],
        "excludedPaths": [
            {
                "path": "/*"
            }
        ]
    },
    "id": "Games"
}

Запрос завершается успешно, но если я проверяю фактическую политику индексации с помощью проводника данных или DocumentClient.readCollection, это выглядит такthis:

{
    "indexingMode": "consistent",
    "automatic": true,
    "includedPaths": [
        {
            "path": "/gameId/?",
            "indexes": []
        },
        {
            "path": "/playerId/?",
            "indexes": []
        },
        {
            "path": "/date/*",
            "indexes": []
        }
    ],
    "excludedPaths": [
        {
            "path": "/*"
        },
        {
            "path": "/\"_etag\"/?"
        }
    ]
}

Как видите, массивы для определений индекса пусты .Затем, если я скопирую политику индексации из сгенерированного SDK вывода и вручную вставлю ее в окно «Масштаб и настройки» эмулятора или портала для созданной коллекции, результат обновления будет следующим:

{
    "indexingMode": "consistent",
    "automatic": true,
    "includedPaths": [
        {
            "path": "/gameId/?",
            "indexes": [
                {
                    "kind": "Range",
                    "dataType": "String",
                    "precision": -1
                },
                {
                    "kind": "Range",
                    "dataType": "Number",
                    "precision": -1
                }
            ]
        },
        {
            "path": "/playerId/?",
            "indexes": [
                {
                    "kind": "Range",
                    "dataType": "String",
                    "precision": -1
                },
                {
                    "kind": "Range",
                    "dataType": "Number",
                    "precision": -1
                }
            ]
        },
        {
            "path": "/date/*",
            "indexes": [
                {
                    "kind": "Range",
                    "dataType": "String",
                    "precision": -1
                },
                {
                    "kind": "Range",
                    "dataType": "Number",
                    "precision": -1
                }
            ]
        }
    ],
    "excludedPaths": [
        {
            "path": "/*"
        },
        {
            "path": "/\"_etag\"/?"
        }
    ]
}

Итак, индексысоздано (хотя с дополнительной Number записью, как указано здесь ).Я что-то не так делаю со сценарием создания?

1 Ответ

0 голосов
/ 27 мая 2019

Пожалуйста, следуйте исходному коду github и обратитесь к приведенному ниже коду, который работает для меня.

import com.microsoft.azure.documentdb.*;

import java.util.Collection;
import java.util.List;

public class CreateCollectionTest {
    //
    static private String YOUR_COSMOS_DB_ENDPOINT = "https://***.documents.azure.com:443/";
    static private String YOUR_COSMOS_DB_MASTER_KEY = "***";

    public static void main(String[] args) throws DocumentClientException {

        DocumentClient client = new DocumentClient(
                YOUR_COSMOS_DB_ENDPOINT,
                YOUR_COSMOS_DB_MASTER_KEY,
                new ConnectionPolicy(),
                ConsistencyLevel.Session);

        DocumentCollection collection = new DocumentCollection();
        collection.set("id", "game");


        IndexingPolicy indexingPolicy = new IndexingPolicy();
        Collection<IncludedPath> includedPaths = new ArrayList<IncludedPath>();
        IncludedPath includedPath = new IncludedPath();
        includedPath.setPath("/gameId/?");
        Collection<Index> indexes = new ArrayList<Index>();

        Index stringIndex = Index.Range(DataType.String);
        stringIndex.set("precision", -1);
        indexes.add(stringIndex);

        Index numberIndex = Index.Range(DataType.Number);
        numberIndex.set("precision", -1);
        indexes.add(numberIndex);

        includedPath.setIndexes(indexes);
        includedPaths.add(includedPath);
        indexingPolicy.setIncludedPaths(includedPaths);

        collection.setIndexingPolicy(indexingPolicy);

        ResourceResponse<DocumentCollection> createColl = client.createCollection("dbs/db", collection, null);


    }
}
...