Neo4j找到节点周围的社区

时间:2016-04-01 09:36:25

标签: neo4j

不确定这是可能的,但会尝试询问。我试图找到共享至少5个(Action)节点的(Person)节点组,其中模型是

(p:PERSON)-[:CHAT]->(a:ACTION)

我可以这样做,以显示共享+5个动作的2个人组

MATCH path =(p1:PERSON)-[r1:CHAT]->(a:ACTION)<-[r2:CHAT]-(p2:PERSON) 
WITH  p1, p2, count(a) as ActionCount WHERE ActionCount >= 5
RETURN (p1)-[:CHAT]->(:ACTION)<-[:CHAT]-(p2)

然而,有一种聪明的方法可以动态地执行此操作,或者使用共享组中有更多人的集合吗?我正在尝试根据行动指标识别高效的团队,并在虚拟团队共享至少5个行动的情况下标记虚拟团队

非常感谢

2 个答案:

答案 0 :(得分:1)

所以我认为你可以通过编程生成查询来做到这一点。我不确定您是否可以在Cypher中以编程方式执行此操作。为了轻松生成查询,我会做类似的事情:

MATCH
  (a:ACTION),
  (a)<-[:CHAT]-(p1:PERSON),
  (a)<-[:CHAT]-(p2:PERSON),
  (a)<-[:CHAT]-(p3:PERSON),
  (a)<-[:CHAT]-(p4:PERSON),
  (a)<-[:CHAT]-(p5:PERSON) 
WITH  p1, p2, p3, p4, p5, count(a) as ActionCount
WHERE ActionCount >= 5
RETURN [p1, p2, p3, p4, p5], ActionCount

如果您以后不再使用path和关系变量,那么您并不需要。

答案 1 :(得分:0)

我认为你这两种方式都说过(每个用户五个动作/每个动作五个用户)。它应该以相同的方式工作:

MATCH (p:PERSON)-[:CHAT]->(a:ACTION)
WITH p, count(a) AS action_count
WHERE action_count >= 5
MATCH (p)-[:CHAT]->(a:ACTION)
RETURN p, collect(a)

我刚刚在那里归还了什么。你应该能够归还任何你喜欢的东西。

另一种方法:

MATCH (p:PERSON)
WHERE size( (p)-[:CHAT]->(:ACTION) ) >= 5
WITH p
MATCH (p)-[:CHAT]->(a:ACTION)
RETURN p, collect(a)