问:Azure Cosmos DB Graph:当索引策略定义为手动时,如何在Graph API中运行查询?

问: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

在Cosmos DB graph中,当我将索引策略定义为自动时,我能够运行查询,但当我将索引策略更新为手动并定义索引路径/标签/?如果索引模式设置为“一致”,则查询不会获取任何数据

假设将索引策略设置为手动时,我的第一个查询是:

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"
},