Java 写入后无法从远程读取Gremlin数据
我使用Java通过以下方式连接到“远程”(localhost:8182)Gremlin服务器g:Java 写入后无法从远程读取Gremlin数据,java,graph-databases,gremlin,tinkerpop,Java,Graph Databases,Gremlin,Tinkerpop,我使用Java通过以下方式连接到“远程”(localhost:8182)Gremlin服务器g: traversalSource = traversal().withRemote(DriverRemoteConnection.using("localhost", 8182, "g")); 然后,我写了一些节点,如下所示: traversalSource.addV("TenantProfile"); 从连接到同一台Gremlin服务器的Gremlin控制台,我可以看到所有创建的节点和边 gre
traversalSource = traversal().withRemote(DriverRemoteConnection.using("localhost", 8182, "g"));
然后,我写了一些节点,如下所示:
traversalSource.addV("TenantProfile");
从连接到同一台Gremlin服务器的Gremlin控制台,我可以看到所有创建的节点和边
gremlin> g==>graphtraversalsource[tinkergraph[vertices:42 edges:64], standard]
查询也可以工作,但如果我从Java中读取graph,它的结果是空的,所以查询例如
traversalSource.V()
.has("label", TENANT_PROFILE_LABEL)
.has("fiscal id", "04228480408")
.out(OWNS_LABEL)
.has("type", "SH")
.values("description")
.toList();
返回emtpy列表
有谁能帮我解决这个问题吗?
谢谢。作为对Stephen的回复,我发布了
iterate()
for(最终映射edgePropertyMap:edgePropertyTable){
edgeTraversal=traversalSource
.V(顶点.get(edgePropertyMap.get(从_键)))
.addE(edgeLabel)
.to(顶点.get(edgePropertyMap.get(to_键));
最终设置edgePropertyNames=edgePropertyMap.keySet();
for(最终字符串nodePropertyName:EdgePropertyName)
如果((!nodePropertyName.equals(从_键))&(!nodePropertyName.equals(到_键))){
最终字符串edgePropertyValue=edgePropertyMap.get(nodePropertyName);
edgeTraversal=edgeTraversal.property(nodePropertyName,edgePropertyValue);
}
edgeTraversal.as(edgePropertyMap.get(标识符_键)).iterate();
}
无论如何,如果不存在
iterate()
,如何从控制台内部看到节点和边?它们是如何在远程服务器上“最终确定”的?作为对Stephen的回复,我在iterate()之前发布了最后的说明
for(最终映射edgePropertyMap:edgePropertyTable){
edgeTraversal=traversalSource
.V(顶点.get(edgePropertyMap.get(从_键)))
.addE(edgeLabel)
.to(顶点.get(edgePropertyMap.get(to_键));
最终设置edgePropertyNames=edgePropertyMap.keySet();
for(最终字符串nodePropertyName:EdgePropertyName)
如果((!nodePropertyName.equals(从_键))&(!nodePropertyName.equals(到_键))){
最终字符串edgePropertyValue=edgePropertyMap.get(nodePropertyName);
edgeTraversal=edgeTraversal.property(nodePropertyName,edgePropertyValue);
}
edgeTraversal.as(edgePropertyMap.get(标识符_键)).iterate();
}
无论如何,如果不存在iterate()
,如何从控制台内部看到节点和边?它们怎么会在远程服务器上“最终确定”呢?我忘了在插入结束时调用iterate()
(我想编辑删除了三个点),我不确定是否要解决这个问题。如果您有相同的图形数据,并且您的遍历在Gremlin控制台中针对这些数据工作,那么我想不出任何原因为什么您不能从Java获得相同的结果,特别是如果您使用类似于toList()
的终端步骤终止遍历。我认为您必须尝试提供一个更完整的示例,其中包含一些重现此问题的示例数据。我刚刚注意到的一点是,您将“>graphtraversalsource[tinkergraph[vertices:42 Edge:64],standard]”作为您的数据存在的证据。这是在演示到图形的本地嵌入式连接,而不是远程连接,这意味着您可能并没有真正证明Gremlin控制台正在从Gremlin服务器获取数据。同样,您可能希望编辑您的问题,以包含该问题的更完整演示。我忘了在插入结束时调用iterate()
(我想编辑删除了三个点),我不确定是否能够理解该问题。如果您有相同的图形数据,并且您的遍历在Gremlin控制台中针对这些数据工作,那么我想不出任何原因为什么您不能从Java获得相同的结果,特别是如果您使用类似于toList()
的终端步骤终止遍历。我认为您必须尝试提供一个更完整的示例,其中包含一些重现此问题的示例数据。我刚刚注意到的一点是,您将“>graphtraversalsource[tinkergraph[vertices:42 Edge:64],standard]”作为您的数据存在的证据。这是在演示到图形的本地嵌入式连接,而不是远程连接,这意味着您可能并没有真正证明Gremlin控制台正在从Gremlin服务器获取数据。同样,您可能希望编辑您的问题,以包含更完整的问题演示。您可能应该删除此答案,而不是编辑您的问题,因为它现在看起来好像您对您的查询有答案一样。也就是说,我不认为这段代码对诊断问题特别有帮助。您可能应该删除此答案,而不是编辑您的问题,因为它现在看起来好像您对您的查询有答案。也就是说,我不认为这段代码对诊断问题特别有用。
for (final Map<String, String> edgePropertyMap : edgePropertyTable) {
edgeTraversal = traversalSource
.V(vertices.get(edgePropertyMap.get(FROM_KEY)))
.addE(edgeLabel)
.to(vertices.get(edgePropertyMap.get(TO_KEY)));
final Set<String> edgePropertyNames = edgePropertyMap.keySet();
for (final String nodePropertyName : edgePropertyNames)
if ((!nodePropertyName.equals(FROM_KEY)) && (!nodePropertyName.equals(TO_KEY))) {
final String edgePropertyValue = edgePropertyMap.get(nodePropertyName);
edgeTraversal = edgeTraversal.property(nodePropertyName, edgePropertyValue);
}
edgeTraversal.as(edgePropertyMap.get(IDENTIFIER_KEY)).iterate();
}