我想知道是否有一种简单的方法可以从 Java 程序中向远程图添加边。目前,我有:
- Gremlin-Server 运行的实例 (TP 3.0.0.M7),允许连接到 Neo4j 图。
gremlin-server.sh -i com.tinkerpop neo4j-gremlin 3.0.0.M7
已预先执行,服务器以gremlin-server.sh conf/remote-objects.yaml
- 一个 Java 应用程序,其中包含一个
Client
与之连接的对象。
据我所知,Java应用程序只能通过client.submitAsync()
方法提交Gremlin查询与服务器通信(对吧?)。
我的问题如下:我要查找两个顶点,如果它们都存在,则在它们之间创建一条边。如果 Graph 对象本身在我的 Java 应用程序中可用,这将与在本地 Gremlin 控制台中一样简单。我会简单地编写Java等价于
gremlin> v = g.addVertex('name', 'Hank')
==>v[16]
gremlin> v2 = g.addVertex('name', 'Pete')
==>v[18]
gremlin> v.addEdge('knows', v2)
==>e[20][16-knows->18]
gremlin>
向远程服务器上的图形添加边更加困难,因为我需要先找到这两个顶点,然后再添加它们之间的边。我这样做的Java代码如下:
//The params object is a Map that binds `fromParam` and `toParam` to strings Hank and Pete, respectively
ResultSet r = client.submitAsync("g.V().has('name', fromParam)", params).get();
ResultSet r2 = client.submitAsync("g.V().has('name', toParam)", params).get();
这给了我两个DetachedVertex
对象。然后是在它们之间添加边的第三个查询
// outVertex and inVertex are the DetachedVertex objects added to params
ResultSet r3 = client.submitAsync("outVertex.attach(g).addEdge('knows', inVertex.attach(g))", params).get();
这似乎可行,但它让我难倒了几个小时,对于这样一个基本的操作来说似乎是一个巨大的麻烦。因此,我的问题如下:
- 有没有 Gremlin 查询可以统一这三个查询?即我可以在单个查询中查找并在两个断开的顶点之间添加一条边吗?
- 或者,Java 程序有没有办法像访问本地一样访问远程 Graph 对象?