我正在为我的项目使用 Neo4j。
在我的图形数据库中,我有两种类型的节点:
- 人
- 水果
人节点可以通过关系相互连接,如果他们喜欢水果,人节点就会与水果的节点连接。
我想找到一组 3 人喜欢例如苹果桃和橙子,并且至少有从一个人到第三个与“朋友”关系的路径,或者所有 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 两者都知道墨菲斯和三位一体,即使三位一体都不认识墨菲斯)。
我的数据库中将有 10 万人,每个人都与某些人以及他们喜欢的水果联系在一起。我想继续进行描述的搜索并获得所有可能的匹配项,例如 Neo、Morpheus 和 Trinity。希望这个描述更清楚。