繁体   English   中英

在Neo4j图形数据库中找到组

[英]find the group in Neo4j graph db

我正在为我的项目使用Neo4j。

在我的图形数据库中,我有两种类型的节点:

  1. 水果

人节点可以通过关系彼此连接。如果朋友喜欢,则人节点与水果的节点连接。

我想找到一组由3个人组成的组,例如喜欢苹果桃子和橙子,并且至少有一条从“关系”到“朋友”的人到第三人的道路,或者所有3个人都是朋友。

由于我是最近才开始使用neo4j的,因此我需要Guru的帮助来提出解决方案。

我的是:

找出一群喜欢苹果的人找出一群喜欢桃子的人找出一群喜欢橙子的人

从这3个集合中找出现有的node-rel-node-rel ...路径,该路径开始于其中一个集合,经过第二个集合,结束于第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

假设您在提到的网站中看到该模型。 因此,在这里我需要搜索喜欢(桃子,香蕉,苹果)的人作为结果,我想要获得Neo,Trinity和Morpheus,因为Neo喜欢桃子,Trinity喜欢香蕉,Morpheus喜欢苹果,而且他们之间有某种联系(Neo都知道Morpheus和Trinity,甚至Trinity都不认识Morpheus。

我的数据库中将有10万人,每个人都与某些人和他们喜欢的水果联系在一起。 我想进行描述性搜索,并获得所有可能的匹配,例如Neo,Morpheus和Trinity。 希望这个描述更加清楚。

尝试查看此查询是否满足您的要求。 它检索由3个人组成的组,每个人都喜欢一种具有给定名称的水果,并且它们之间通过一两个关系[:KNOWS]相互连接。 不确定是否可以很好地扩展。

Match p1:Person-[:LIKES]->f1:Fruit, p2:Person-[:LIKES]->f2:Fruit, p3:Person-[:LIKES]->f3:Fruit, path1=p1-[:KNOWS*1..2]-p2, path2=p2-[:KNOWS*1..2]-p3,path3=p1-[:KNOWS*1..2]-p3
Where f1.name = 'Apple' and f2.name='Peach' and f3.name = 'Banana' and all(n in nodes(path1) where n in [p1,p2,p3]) and all(n in nodes(path2) where n in [p1,p2,p3]) and all(n in nodes(path3) where n in [p1,p2,p3])
Return p1.name, p2.name, p3.name

注意:我在每个水果节点上添加了标签“:Fruit”,并在每个人节点上添加了标签“:Person”。

这是图形和查询的控制台,

http://console.neo4j.org/?id=fswj2b

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM