[英]Gremlin query to find the entire sub-graph that a specific node is connected in any way to
我是 Gremlin 的新手,正在使用gremlin-python
遍历我的图表。 该图由许多集群或子图组成,这些集群或子图是内部连接的,并且不与图中的任何其他集群互连。
一个简单的例子是一个有 5 个节点和 3 个边的图:
Customer_1
通过1_HasCreditCard_A
边连接到CreditCard_A
Customer_2
通过2_HasCreditCard_B
边缘连接到CreditCard_B
Customer_3
通过3_HasCreditCard_A
边连接到CreditCard_A
我想要一个查询,它将返回一个子图 object 连接(输入或输出)到查询节点的所有节点和边。 然后我可以将这个子图存储为一个变量,然后在它上面运行不同的遍历来计算不同的东西。
此查询需要递归,因为这些集群可能由彼此相距许多(向内或向外)跃点的节点组成。 还有许多不同类型的节点和边,它们都必须返回。
例如:
Customer_1
,则生成的子图将包含Customer_1
、 Customer_3
、 CreditCardA
、 1_HasCreditCard_A
和3_HasCreditCard_A
。Customer_2
,则返回的子图将包含Customer_2
、 CreditCard_B
、 2_HasCreditCard_B
。Customer_3
,将返回与Customer_1
查询返回的完全相同的子图 object。我已经使用了 Neo4J 和 Cypher 和 Dgraph 和 GraphQL 并发现在这两种语言中这项任务很容易,但是在理解 grem 方面我有点挣扎。
编辑:
从这个问题,选择的答案应该达到我想要的,但没有通过将.both('created')
更改为 .both .both()
) 来指定边缘类型。
但是,循环语法: .loop{true}{true}
当然在 Python 中是无效的。 这个循环 function 在gremlin-python
中可用吗? 我找不到任何东西。
编辑2:
我已经尝试过了,我认为它似乎按预期工作。
g.V(node_id).repeat(bothE().otherV().simplePath()).emit()
这是我正在寻找的有效解决方案吗? 是否也可以在此结果中包含查询的节点?
关于第二次编辑,这看起来像是一个有效的解决方案,它返回连接到起始顶点的所有顶点。 一些小修复:
bothE().otherV()
更改为both()
repeat
之前移动emit
步骤dedup
步骤来删除所有重复的顶点(可以是超过 1 个顶点的路径)g.V(node_id).emit().repeat(both().simplePath()).dedup()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.