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