在 java 中使用 gremlin 获取两个节点之间的所有路径
Fetching all the paths between two nodes using gremlin in java
您好,我是 gremlin 的新手,正在尝试通过查找两个节点之间的所有路径来解决问题。在 gremlin 控制台上的简单查询中,我能够使用此查询来做到这一点:
(Name of the first Node).loop(1){it.loops<100}{true}.has('name', (Name of the second node)).path{it.name}
但是当我试图从 java 方法中获取它时,我遇到了很多问题,比如:
-- 不知道在哪里放置查询?
-- 什么样的数据结构可以正确接收行数组。
-- 如何从图中收集第一个节点和第二个节点。
在这里我尝试着继续这个,但没有线索:
Graph g = new OrientGraph(AppConstants.GRAPH_LOCATION);
List<String> vertexList = new ArrayList<String>();
try{
for (Vertex v : g.getVertices()) {
String vertexName = v.getProperty("name");
vertexList.add(vertexName);
}
return vertexList;
} catch (final Exception ex) {
throw new AppSystemException(ex);
}finally{
g.shutdown();
谢谢,
萨吉尔
你的查询对我来说意义不大,但描述很有帮助。这是一个示例,使用 TinkerGraph 查找 marko
和 lop
之间的所有路径:
final Graph g = TinkerGraphFactory.createTinkerGraph();
List<List> names = new ArrayList<>();
new GremlinPipeline<Vertex, ArrayList<Vertex>>(g).V().has("name", "marko").as("x").out().loop("x",
new PipeFunction<LoopPipe.LoopBundle<Vertex>, Boolean>() {
@Override
public Boolean compute(LoopPipe.LoopBundle<Vertex> loopBundle) {
return loopBundle.getLoops() < 100;
}
}, new PipeFunction<LoopPipe.LoopBundle<Vertex>, Boolean>() {
@Override
public Boolean compute(LoopPipe.LoopBundle<Vertex> loopBundle) {
return "lop".equals(loopBundle.getObject().getProperty("name"));
}
}
).has("name", "lop").path(new PipeFunction<Vertex, String>() {
@Override
public String compute(final Vertex vertex) {
return vertex.getProperty("name");
}
}).fill(names);
names
列表将填充以下 2 个条目:
- [marko, lop]
- [马可、乔希、洛普]
如果将 Groovy 转换为 Java 是最大的问题,您一定要检查一下:
您好,我是 gremlin 的新手,正在尝试通过查找两个节点之间的所有路径来解决问题。在 gremlin 控制台上的简单查询中,我能够使用此查询来做到这一点:
(Name of the first Node).loop(1){it.loops<100}{true}.has('name', (Name of the second node)).path{it.name}
但是当我试图从 java 方法中获取它时,我遇到了很多问题,比如:
-- 不知道在哪里放置查询? -- 什么样的数据结构可以正确接收行数组。 -- 如何从图中收集第一个节点和第二个节点。
在这里我尝试着继续这个,但没有线索:
Graph g = new OrientGraph(AppConstants.GRAPH_LOCATION);
List<String> vertexList = new ArrayList<String>();
try{
for (Vertex v : g.getVertices()) {
String vertexName = v.getProperty("name");
vertexList.add(vertexName);
}
return vertexList;
} catch (final Exception ex) {
throw new AppSystemException(ex);
}finally{
g.shutdown();
谢谢, 萨吉尔
你的查询对我来说意义不大,但描述很有帮助。这是一个示例,使用 TinkerGraph 查找 marko
和 lop
之间的所有路径:
final Graph g = TinkerGraphFactory.createTinkerGraph();
List<List> names = new ArrayList<>();
new GremlinPipeline<Vertex, ArrayList<Vertex>>(g).V().has("name", "marko").as("x").out().loop("x",
new PipeFunction<LoopPipe.LoopBundle<Vertex>, Boolean>() {
@Override
public Boolean compute(LoopPipe.LoopBundle<Vertex> loopBundle) {
return loopBundle.getLoops() < 100;
}
}, new PipeFunction<LoopPipe.LoopBundle<Vertex>, Boolean>() {
@Override
public Boolean compute(LoopPipe.LoopBundle<Vertex> loopBundle) {
return "lop".equals(loopBundle.getObject().getProperty("name"));
}
}
).has("name", "lop").path(new PipeFunction<Vertex, String>() {
@Override
public String compute(final Vertex vertex) {
return vertex.getProperty("name");
}
}).fill(names);
names
列表将填充以下 2 个条目:
- [marko, lop]
- [马可、乔希、洛普]
如果将 Groovy 转换为 Java 是最大的问题,您一定要检查一下: