问:Azure Cosmos DB Graph:当索引策略定义为手动时,如何在Graph API中运行查询?
在Cosmos DB graph中,当我将索引策略定义为自动时,我能够运行查询,但当我将索引策略更新为手动并定义索引路径/标签/?如果索引模式设置为“一致”,则查询不会获取任何数据 假设将索引策略设置为手动时,我的第一个查询是:问:Azure Cosmos DB Graph:当索引策略定义为手动时,如何在Graph API中运行查询?,azure,graph,gremlin,azure-cosmosdb,Azure,Graph,Gremlin,Azure Cosmosdb,在Cosmos DB graph中,当我将索引策略定义为自动时,我能够运行查询,但当我将索引策略更新为手动并定义索引路径/标签/?如果索引模式设置为“一致”,则查询不会获取任何数据 假设将索引策略设置为手动时,我的第一个查询是: g.addV('Azure').property('name','Cerulean Software')) 结果是: [ { "id": "0c14a00a-edf6-46b1-9e40-45cc37f750ea", "labe
g.addV('Azure').property('name','Cerulean Software'))
结果是:
[
{
"id": "0c14a00a-edf6-46b1-9e40-45cc37f750ea",
"label": "Azure",
"type": "vertex",
"properties": {
"name": [
{
"id": "f89ee2ee-74df-4256-a5d4-2b47eb526976",
"value": "Cerulean Software"
}
]
}
}
]
现在,当索引策略设置为手动时,我的第二个查询是:
g.V().hasLabel('Azure')
即使在名为“Azure”的图中存在顶点,第二个查询也不会获取任何结果
这背后可能的原因是什么
编辑1:更改前手动索引策略
编辑2:更改后的手动索引策略
对于Cosmos,图形语句不会在Azure端作为遍历执行。图形客户端实际上将gremlin语句转换为文档SQL调用,然后在客户端将结果聚合回给您。在语句g.V.hasLabel'Azure'中,调用实际上被转换为{query:SELECT N_2 FROM Node N_2,其中N_defined N_2._isEdge=false,N_2.label='Azure'} 这可以通过使用代理(如Fiddler)进行验证,该代理将允许您检查来自计算机的出站调用 顶级_isEdge属性似乎在几乎所有Gremlin翻译的查询中都使用,因此我怀疑如果将该属性添加到索引策略中,您应该会开始看到预期的结果 编辑: 我最初错过了索引策略中设置自动的部分:false。默认情况下,在“选择输入和选择输出索引”标题下,所有文档都会自动编制索引,但您可以选择将其关闭。关闭索引后,只能通过文档的自链接或使用ID的查询来访问文档 如果您选择在关闭索引的情况下运行,那么索引策略的其余部分实际上毫无意义,并且不直接按文档Id进行的查询将不再有效。你能详细说明一下你在这里到底想要完成什么吗?似乎有点混乱。您在label和iEdge上设置的索引设置甚至没有必要,因为它们与您为*设置的值相同,而*是匹配所有路径的默认规则
发布你的索引策略的目标,我可以尝试提出适当的建议,但你肯定会想将automatic:true重新纳入你的策略。谢谢Jesse。因此,我尝试将此属性添加到索引策略中,但不幸的是,这并没有产生任何影响。在编辑1之前和编辑2之后,我已使用索引策略编辑了问题,并修改了您建议的更改。如果您能检查一下,让我知道我做错了什么,我将不胜感激。@shruti我已经更新了我的答案,以提供更多信息。如果这对你很有帮助,请告诉我,谢谢,杰西。现在我可以通过在查询中传递顶点id来获取数据了。@shruti没问题,很高兴我能够帮助您
"indexingPolicy": {
"automatic": false,
"excludedPaths": [],
"includedPaths": [
{
"path": "/*",
"indexes": [
{
"dataType": "Number",
"kind": "Range",
"precision": -1
},
{
"dataType": "String",
"kind": "Hash",
"precision": 3
}
]
},
{
"path": "/label/?",
"indexes": [
{
"dataType": "String",
"kind": "Hash",
"precision": 3
},
{
"dataType": "Number",
"kind": "Range",
"precision": -1
}
]
}
],
"indexingMode": "consistent"
},
"indexingPolicy": {
"automatic": false,
"excludedPaths": [],
"includedPaths": [
{
"path": "/*",
"indexes": [
{
"dataType": "Number",
"kind": "Range",
"precision": -1
},
{
"dataType": "String",
"kind": "Hash",
"precision": 3
}
]
},
{
"path": "/_isEdge/?",
"indexes": [
{
"dataType": "String",
"kind": "Hash",
"precision": 3
},
{
"dataType": "Number",
"kind": "Range",
"precision": -1
}
]
}
],
"indexingMode": "consistent"
},