【发布时间】:2013-09-20 13:00:16
【问题描述】:
我在我的项目中使用 Neo4j。
在我的图表数据库中,我有 2 种类型的节点:
- 人
- 水果
人物节点可以通过朋友关系相互连接 人节点如果喜欢水果,则与水果的节点相连。
我想找到一组 3 个人喜欢例如苹果桃子和橙子的集合,并且至少有一个人到第三个关系“朋友”的路径,或者三个人都是朋友。
由于我最近才开始使用neo4j,我需要Guru的帮助来想出解决方案。
我的想法是:
找出喜欢苹果的人群 找出喜欢桃子的那群人 找出喜欢橙色的人群
从这 3 个集合中找出现有的 node-rel-node-rel... 路径,从其中一个集合开始,经过第 2 个集合,最终在第 3 个集合结束。
您能否确认我的方法是否正确和最优,是否可以通过 Cypher 或 py2neo 实施?
找不到分享方式,但可以在此处粘贴查询。 如果你把它粘贴回 console.neo4j.org 你会得到一个图表:
CREATE (Neo { name:'Neo' }),(Morpheus { name: 'Morpheus' }),(Trinity { name: 'Trinity' }),(Cypher { name: 'Cypher' }),(Apple { fruit: 'Apple' }),(Peach { fruit: 'Peach' }),(Banana { fruit:'Banana' }), root-[:ROOT]->Neo, Neo-[:KNOWS]->Morpheus, Neo-[:KNOWS]->Trinity, Morpheus-[:KNOWS]->Cypher, Neo-[:LIKES]->Peach, Trinity-[:LIKES]-Banana, Morpheus-[:LIKES]-Apple
假设您在提到的网站上看到了该模型。所以在这里我需要搜索喜欢(Peach,Banana,Apple)的人作为结果我想要得到 Neo,Trinity 和 Morpheus,因为 Neo 喜欢 peach,Trinity 喜欢香蕉,Morpheus 喜欢苹果,并且它们以某种方式连接(Neo 两者都知道Morpheus 和 Trinity,即使 Trinity 也不认识 Morpheus)。
我的数据库中将有 100K 人,每个人都与某些人以及他们喜欢的水果联系在一起。我想继续描述搜索并获得所有可能的匹配项,例如 Neo、Morpheus 和 Trinity。希望这个描述更清楚。
【问题讨论】:
-
你的意思是要找 3 个彼此成为朋友并喜欢 3 种水果的人?
-
neo4j 的哪个版本?
-
简而言之,我想找到至少有联系的 3 个人,'a' 是 'b' 的朋友,'b' 是 'c' 的朋友......不是强制性的,'a' 是'c' 的朋友。其中一个喜欢橙子,另一个喜欢桃子和第三个苹果。
-
有没有机会在 console.neo4j.org 中建模并分享链接?
-
看看更新