如何以简洁的方式在Datastax DSE 5.0 Graph中按顶点ID查询?

Posted

技术标签:

【中文标题】如何以简洁的方式在Datastax DSE 5.0 Graph中按顶点ID查询?【英文标题】:how to query by vertex id in Datastax DSE 5.0 Graph in a concise way? 【发布时间】:2017-05-05 00:26:42 【问题描述】:

似乎顶点的唯一id是DSE Graph中的community_id。

我发现这行得通(id 很长):

   v = g.V().has("VertexLabel","community_id",id).next()

这些都不起作用:

   v = g.V("community_id",id).next()
   v = g.V("community_id","VertexLabel:"+id).next()
   v = g.V(id).next()
   v = g.V().hasId(id).next()
   v = g.V().hasId("VertexLabel:"+id).next()
   v = g.V("VertexLabel:"+id).next()

编辑

经过一番调查,我发现对于顶点 v,v.id() 返回一个 LinkedHashMap:

Vertex v = gT.next();
Object id = v.id();
System.out.println(id);
System.out.println(id.getClass());
System.out.println(g.V().hasId(id).next());
System.out.println(g.V(id).next());

以上打印:

~label=User, community_id=1488246528, member_id=512
class java.util.LinkedHashMap
v[~label=User, community_id=1488246528, member_id=512]
v[~label=User, community_id=1488246528, member_id=512]

应该有更简洁的方式... 任何帮助表示赞赏:)

【问题讨论】:

【参考方案1】:

其实我找到了:

id可以写成这样的String形式:"vertexLabel:community_id:member_id"

所以对于上面的例子id="User:1488246528:512"

v = g.V().hasId("User:1488246528:512").next()
v = g.V("User:1488246528:512").next()

返回特定的顶点

到目前为止,我不知道如何简洁地打印 Vertex 的 id(作为字符串)以便它可以在 V() 或 hasId() 中使用。我目前所做的是:

LinkedHashMap id = ((LinkedHashMap)v.id());
String idStr = v.label()+":"+id.get("community_id")+":"+id.get("member_id");

【讨论】:

【参考方案2】:

Michail,您也可以提供自己的 ID 来帮助简化此项目。这样做有取舍,但也有好处。详情请看这里 - http://docs.datastax.com/en/latest-dse/datastax_enterprise/graph/using/createCustVertexId.html?hl=custom%2Cid

【讨论】:

是的,我知道它存在,但除非它是 UUID,否则我认为我不知道另一个 id 可能是什么......

以上是关于如何以简洁的方式在Datastax DSE 5.0 Graph中按顶点ID查询?的主要内容,如果未能解决你的问题,请参考以下文章

麦格理银行借助DataStax Enterprise (DSE) 驱动数字化转型

DataStax 代理 6.5 未连接到 DSE 集群

DataStax OpsCenter 未在 centos dse 集群上启动

红帽 6.4 上的 Datastax Enterprise 5.0.0

如何找出特定 DSE 正在运行的 Cassandra 版本?

在 datastax 图中使用 gremlin 访问 Solr 的最佳方法