Neo4j查找节点周围的社区

Neo4j查找节点周围的社区,neo4j,Neo4j,不确定这是否可行,但将尝试询问。我正在尝试查找共享模型所在位置至少5个(操作)节点的(人员)节点组 (p:PERSON)-[:CHAT]->(a:ACTION) 我可以这样做,以显示共享+5个动作的两个人组 MATCH path =(p1:PERSON)-[r1:CHAT]->(a:ACTION)<-[r2:CHAT]-(p2:PERSON) WITH p1, p2, count(a) as ActionCount WHERE ActionCount >= 5 RE

不确定这是否可行,但将尝试询问。我正在尝试查找共享模型所在位置至少5个(操作)节点的(人员)节点组

(p:PERSON)-[:CHAT]->(a:ACTION)
我可以这样做,以显示共享+5个动作的两个人组

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)
匹配路径=(p1:PERSON)-[r1:CHAT]->(a:ACTION)=5

RETURN(p1)-[:CHAT]->(:ACTION)我想你是双向说的(每个用户五个操作/每个操作五个用户)。无论哪种方式,其工作原理都应相同:

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)

因此,我认为可以通过编程方式生成查询来实现这一点。我不确定你是否可以用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
匹配
(a:行动),

(a) 让我试着这样解释。我们希望社区中的人共享多个行动(即至少共享5个行动),我们希望社区中的人共享以下结果:示例1:[Person1,Person2,Person3]所有人都可以谈论[Action1,Action2,Action5,Action6,Action7]。例2:[Person1,Person6,Person7]所有人都在谈论[Action11,Action12,Action15,Action26,Action27]。例3:[Person4,Person6]两人都在谈论[Action71,Action72,Action75,Action77,Action78]。有了动作节点背后的指标,我们就可以看到谁是表现最好的组合。哦,我明白了。我会在另一个答案中尝试一下。当你检查更多的人时,你可能也会得到一个组合爆炸。谢谢这给了我下面的一些想法,但不确定为什么它会起作用,但它几乎就在那里,
MATCH(a:ACTION)所以它几乎起作用,它给出了所有人的组合,至少有5个动作的组合。但是我得到了基本相同的人形组合的多行,例如人形[A、B、C、D、e]--[5个动作];人员[A、C、D]——[相同的5项行动];人员[D,E]-[相同的5个动作]重要的是要记住,当您进行
匹配时,它会找到所有可能的方法来形成匹配。所以你可以得到A和B作为p1/p2和p2/p1。看看这个问题:啊-是的,你会在我尝试的代码中看到-我唯一能发现的是,如果集合以不同的顺序返回动作节点[A,B,C,D,E],那么将返回一个新行。你知道我该怎么预防吗?