我是 Gremlin 的新手,我正在使用gremlin-python
它来遍历我的图表。该图由许多集群或子图组成,这些集群或子图是内部连接的,并且不与图中的任何其他集群互连。
一个简单的例子是一个有 5 个节点和 3 个边的图:
Customer_1
CreditCard_A
与1_HasCreditCard_A
边缘相连Customer_2
CreditCard_B
与2_HasCreditCard_B
边缘相连Customer_3
CreditCard_A
与3_HasCreditCard_A
边缘相连
我想要一个查询,它将返回所有节点和连接(输入或输出)到查询节点的边的子图对象。然后我可以将这个子图存储为一个变量,然后在它上面运行不同的遍历来计算不同的东西。
此查询需要递归,因为这些集群可能由彼此相距许多(向内或向外)跃点的节点组成。还有许多不同类型的节点和边,它们都必须返回。
例如:
- 如果我
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
。
我已经将 Neo4J 与 Cypher 和 Dgraph 与 GraphQL 一起使用,并发现在这两种语言中这项任务非常容易,但在理解 gremlin 方面却更加困难。
编辑:
从,这个问题,选择的答案应该达到我想要的,但没有通过更改.both('created')
为 just来指定边缘类型.both()
。
但是,循环语法:.loop{true}{true}
当然在 Python 中是无效的。此循环功能是否可用gremlin-python
?我找不到任何东西。
编辑2:
我已经尝试过了,我认为它似乎按预期工作。
g.V(node_id).repeat(bothE().otherV().simplePath()).emit()
这是我正在寻找的有效解决方案吗?是否也可以在此结果中包含查询的节点?