我正在使用Github示例生成图形(https://github.com/Azure-Samples/azure-cosmos-db-graph-java-getting-started) . 现在我想查询它并在我手中持有一个顶点实例,以便根据知识图中用户的进一步输入进一步遍历 .
提交此gremlin查询: g.V().hasLabel('schedule').inE().outV().hasLabel('url').as('a').dedup() .where(and(out().hasLabel('schedule').has('name','3'),out() .hasLabel('states').has('name', 'federal'))).select('a')
// Submitting remote query to the server.
ResultSet results = client.submit(query);
CompletableFuture<List<Result>> completableFutureResults = results.all();
List<Result> resultList = completableFutureResults.get();
for (Result result : resultList) {
System.out.println("My vertex--"+result.getVertex());
System.out.println("\nQuery result:");
System.out.println("resultssssss-"+result.toString());
}
我怎么能这样做现在我得到一个类强制转换异常,如下所述:
java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to org.apache.tinkerpop.gremlin.structure.Vertex
at org.apache.tinkerpop.gremlin.driver.Result.getVertex(Result.java:131)
at GetStarted.Dynamic.main(Dynamic.java:155)
1 回答
select('a')
对我来说似乎是多余的 - 我认为可以删除 . 它正在选择一个已经是where()
的当前输出的输出,它已经是"a"处的那个顶点,这意味着你的遍历应该是:我想进一步的优化是在
and()
之前做out()
所以你只能遍历那些边:现在......返回一个
Vertex
,然而,你所拥有的也应该返回一个Vertex
. 至少根据TinkerPop规范,当在单个标签上执行select()
时,您应该返回单个对象 . 但是,如果您执行多个标签,那么您将获得Map
. 您可以在此处看到使用TinkerGraph演示的内容:这让我想知道CosmosDB是否有适当的小细微差别 - 如果没有,那么这在技术上是一个“bug” .