DocumentDB: удаление индексации по умолчанию

Я пытаюсь удалить индексы по умолчанию, которые создаются для новой коллекции:

{
  "indexingMode": "lazy",
  "automatic": true,
  "includedPaths": [
    {
      "path": "/*",
      "indexes": [
        {
          "kind": "Range",
          "dataType": "Number",
          "precision": -1
        },
        {
          "kind": "Hash",
          "dataType": "String",
          "precision": 3
        }
      ]
    },
    {
      "path": "/\"_ts\"/?",
      "indexes": [
        {
          "kind": "Range",
          "dataType": "Number",
          "precision": -1
        },
        {
          "kind": "Hash",
          "dataType": "String",
          "precision": 3
        }
      ]
    }
  ],
  "excludedPaths": []
}

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

При попытке исключить все, используя это:

collection.IndexingPolicy.ExcludedPaths.Add(new ExcludedPath
{
    Path = "/*"
});

client.ReplaceDocumentCollectionAsync(collection).Wait();

Я получаю следующую ошибку на ReplaceDocumentCollectionAsync():

Путь индексации '/*' не может быть принят. Убедитесь, что путь уникален для всех наборов путей индексации и является действительным.

Я хочу иметь возможность определять свои собственные, пользовательские, индексные пути. Чтобы сделать это, мне нужно удалить индексы по умолчанию (которые индексируют все).

ОБНОВИТЬ

Я удалил индекс, назначив включения пустой коллекции И, исключив все пути:

collection.IndexingPolicy.IncludedPaths = new Collection<IncludedPath>();
collection.IndexingPolicy.ExcludedPaths = new Collection<ExcludedPath>();
collection.IndexingPolicy.ExcludedPaths.Add(new ExcludedPath
{
    Path = "/*"
});

Примечание 1: По какой-то причине, если только сделать первый оператор, ничто не изменится в политике индекса... и без ошибок.

Заметка 2: ExcludePaths должен быть изначально установлен в пустую коллекцию, иначе (если путь уже существует) он обнаружит конфликт и выдаст ошибку (конечно, при выполнении ReplaceDocumentCollectionAsync).

Индексирование документа:

{
  "indexingMode": "lazy",
  "automatic": true,
  "includedPaths": [
    {
      "path": "/\"_ts\"/?",
      "indexes": [
        {
          "kind": "Range",
          "dataType": "Number",
          "precision": -1
        },
        {
          "kind": "Hash",
          "dataType": "String",
          "precision": 3
        }
      ]
    }
  ],
  "excludedPaths": [
    {
      "path": "/*"
    }
  ]
}

Я предполагаю, что /_ts/? путь обязателен

2 ответа

Решение

Похоже, вы в значительной степени поняли это. Чтобы уточнить, id а также _ts рассматриваются как особые свойства в отношении индексации.

  • id неявно рассматривается как первичный ключ документа - в котором, id всегда будет проиндексирован с соблюдением уникальности.

  • _ts является отметкой времени, когда документ был последний раз написан (создан или заменен), и также всегда будет проиндексирован. Это свойство будет явно отмечено в политике индекса.

Следующая политика индексации иллюстрирует, как индексировать только document.prop.subprop собственность (наряду с id а также _ts):

{
  "indexingMode": "consistent",
  "automatic": true,
  "includedPaths": [
    {
      "path": "/prop/subprop/?",
      "indexes": [
        {
          "kind": "Range",
          "dataType": "Number",
          "precision": -1
        },
        {
          "kind": "Range",
          "dataType": "String",
          "precision": -1
        }
      ]
    },
    {
      "path": "/\"_ts\"/?",
      "indexes": [
        {
          "kind": "Range",
          "dataType": "Number",
          "precision": -1
        },
        {
          "kind": "Hash",
          "dataType": "String",
          "precision": 3
        }
      ]
    }
  ],
  "excludedPaths": [
    {
      "path": "/*"
    }
  ]
}

Простой способ исключить все - переключить indexingMode: None

Другие вопросы по тегам