我尝试在CosmosDB文档集上创建自定义索引策略,仅包含索引中的1个字段。
索引政策如下:
new IndexingPolicy
{
Automatic = true,
IndexingMode = IndexingMode.Consistent,
ExcludedPaths = new Collection<ExcludedPath>(new[]
{
new ExcludedPath { Path = "/*" }
}),
IncludedPaths = new Collection<IncludedPath>(new[]
{
new IncludedPath
{
Path = "/Id/?",
Indexes = new Collection<Index>(new Index[] { new RangeIndex(DataType.String) {Precision = -1 } })
}
})
};
然后我查询文件集合:
CosmosClient.CreateDocumentQuery<Entity>(
CollectionUri(docCollection),
"SELECT x from x where x.Id != \"\" ",
new FeedOptions
{
MaxItemCount = 100,
RequestContinuation = null,
EnableCrossPartitionQuery = false,
PartitionKey = new PartitionKey("entities"),
}).AsDocumentQuery();
此类请求会引发错误:指定了一个无效查询,其中包含针对从索引中排除的路径的过滤器。请考虑在请求中添加允许扫描标头。
虽然几乎相同(检查相等而不是不平等)给出了正确的结果。
我是否将索引策略配置错误或者在查询时需要指定一些额外的参数?感谢
答案 0 :(得分:2)
您的分区键路径也应包含在包含的路径中。它隐含地包含在过滤器中,因为您在PartitionKey = new PartitionKey("entities")
中设置了它。