【发布时间】:2018-09-12 04:21:13
【问题描述】:
条件:
-
vadas在2 hops内连接到lop -
vadas在3 hops内连接到peter -
vadas是否连接到1 hops中的does-not-exists(不会给出任何结果的搜索)
具有预期结果的虚拟搜索
条件
1AND2=> [vadas-marko-lop, vadas-marko-lop-peter]条件
1或3=> [vadas-marko-lop]
我能得到什么
- 条件
1和2
gremlin> g.V().has("person", "name", "vadas").as("from")
.select("from").as("to1").repeat(both().as("to1")).times(2).emit().has("software", "name", "lop")
.select("from").as("to2").repeat(both().as("to2")).times(3).emit().has("person", "name", "peter")
.project("a", "b")
.by(select(all, "to1").unfold().values("name").fold())
.by(select(all, "to2").unfold().values("name").fold())
==>[a:[vadas,marko,lop],b:[vadas,marko,lop,peter]]
- 条件
1或2
gremlin> g.V().has("person", "name", "vadas").as("nodes")
.union(repeat(both().as("nodes")).times(2).emit().has("software", "name", "lop"),
out().has("x", "y", "does-not-exist").as("nodes"))
.project("a")
.by(select(all, "nodes").unfold().values("name").fold())
==>[a:[vadas,marko,lop]]
那么如何实现这一点我有两种不同的查询格式,有没有办法编写一个可以同时做到的查询格式?
这没有用,这里有什么问题吗?不返回已经遍历的节点
g.V().has("person", "name", "vadas").as("nodes")
.or(
repeat(both().as("nodes")).times(2).emit().has("software", "name", "lop"),
repeat(both().as("nodes")).times(3).emit().has("person", "name", "peter")
)
.project("a").by(select(all, "nodes").unfold().values("name").fold())
==>[a:[vadas]]
// Expect paths to be printed here vadas..lop, vadas...peter
【问题讨论】:
-
我不能说我完全理解这个问题。 “通用”是什么意思?这似乎是您问题的重点,但不清楚这对我意味着什么。
-
and和or的逻辑我可以用两种不同的方法实现,有没有更好的方法来结合这两种方法? -
我还没关注。 Gremlin 有
and()/or()条件逻辑步骤,但我不知道您所说的“将这两者结合起来的更好方法”是什么意思?你是说你想要另一种方法来编写上面的遍历,不使用这两个步骤吗? -
我会更新帖子以尝试更好地解释
-
我已经编辑了帖子,现在更好了吗?
标签: gremlin tinkerpop tinkerpop3 gremlin-server