使用 neo4j 查找与给定节点有关系的节点集的有效方法
对于给定的两个节点,是否有一种有效的方法来找到一组公共节点(具有已定义的关系)。
例如,节点 A1
、B1
、C1
-C4
通过关系 x
连接> 和 y
:
A1 --x--> C1
A1 --x--> C2
A1 --x--> C3
B1 --y--> C2
B1 --y--> C3
B1 --y--> C4
A1(x)
和 B1(y)
的公共节点集为 [C2, C3]< /代码>。
Is there an efficient way with given two nodes to find a set of their common nodes (with defined relationships).
For example, having nodes A1
, B1
, C1
-C4
connected with relationships x
and y
:
A1 --x--> C1
A1 --x--> C2
A1 --x--> C3
B1 --y--> C2
B1 --y--> C3
B1 --y--> C4
a common node set for A1(x)
and B1(y)
would be [C2, C3]
.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
在 Gremlin (http://gremlin.tinkerpop.com) 中,这表示为:
以下是每个步骤的内容是:
田田!
祝你好运,
马可.
http://markorodriguez.com
In Gremlin (http://gremlin.tinkerpop.com), this is expressed as such:
Here is what each step does:
Tada!
Good luck,
Marko.
http://markorodriguez.com
在许多情况下,可以利用域的结构来提高性能。假设您知道,与
B< 上的
y
关系数量相比,您的A
实体通常具有较少的x
关系数量。 /代码> 实体。然后,您可以从 A 节点开始遍历两步,查看 B 节点出现的位置,并以这种方式过滤掉 C 节点。以下是此方法的一些代码:另一种方法是启动两个线程,从任意一侧扫描关系。
第三种方法是创建一个专门的索引来帮助回答此类查询,这显然会损害插入性能。
In many cases the structure of the domain can be leveraged to improve performance. Let's say that you know that in general your
A
entities have lessx
relationships compared to the number ofy
relationships on theB
entities. Then you could traverse two steps from the A node and see where theB
node shows up, and filter out theC
nodes this way. Here's some code for this approach:Another way would be to start two threads that scan the relationships from either side.
A third approach would be to create a specialized index that would help answering this kind of queries, which would obviously hurt insert performance.