【问题标题】:find the group in Neo4j graph db在 Neo4j 图形数据库中找到组
【发布时间】:2013-09-20 13:00:16
【问题描述】:

我在我的项目中使用 Neo4j。

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

  1. 水果

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

我想找到一组 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 中建模并分享链接?
  • 看看更新

标签: graph neo4j cypher py2neo


【解决方案1】:

试试看这个查询是否满足您的要求。它检索 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

【讨论】:

  • 感谢您的回复,将检查这种方法的有效性。也许在水果上添加 node_auto_index 有意义?
  • 是的,水果名称的索引在某种程度上会有所帮助。我已经更正了查询中的几个拼写错误。所以请务必检查更新后的查询。
  • 我正在尝试使用 Neo Morpheus 和 Trinity 对示例模型进行查询,但它没有返回任何内容(查询耗时 41 毫秒并且没有返回任何行)
  • 您是否在图表中添加了标签?我为查询设置了控制台console.neo4j.org/?id=fswj2b,以便您可以在那里看到结果。
  • 这似乎变得相当复杂。我认为困难在于表达路径中的共现约束。无论如何,我更新了查询以确保路径上的任何两个点直接连接或通过第三点连接。即路径上不应出现任何其他点。
猜你喜欢
  • 2015-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 2015-03-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多