我正在尝试删除为新集合创建的默认索引:
{
"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/?
路径是强制性的。
答案 0 :(得分:4)
听起来你几乎已经明白了。为了澄清,$$treeLevel
和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": "/*"
}
]
}
答案 1 :(得分:1)
排除所有内容的简单方法是切换indexingMode:无