返回neo4j中最常见的路径

返回neo4j中最常见的路径,neo4j,cypher,Neo4j,Cypher,我有一个非常简单的结构: U1-:VISITS->P1-:VISITS->P2-:VISITS->P3-VISITS->P4... 每个拜访关系都有一个等级为1到10的等级。我对从U1-:访问->P1-:访问->P2开始的关系感兴趣,其中第一等级是我注意到的第一件事(这可能是一个转录错误,因为在关系上没有方向。此外,您没有使用标签,因此可以在路径的任何子部分上进行匹配。这可能会更好: MATCH p=(a:User)-[r:VISITS]->(b:Page)-[t

我有一个非常简单的结构:

U1-:VISITS->P1-:VISITS->P2-:VISITS->P3-VISITS->P4...

每个拜访关系都有一个等级为1到10的等级。我对从U1-:访问->P1-:访问->P2开始的关系感兴趣,其中第一等级是我注意到的第一件事(这可能是一个转录错误,因为在关系上没有方向。此外,您没有使用标签,因此可以在路径的任何子部分上进行匹配。这可能会更好:

MATCH p=(a:User)-[r:VISITS]->(b:Page)-[t:VISITS]->(c:Page)-[q*1..2]->(page:Page)
  WHERE r.rating<2 AND t.rating>5
  RETURN EXTRACT (n IN nodes(p)|n.page_id) ,count(p)
  ORDER BY count(p) DESC;
MATCH p=(a:User)-(r:visions]->(b:Page)-(t:visions]->(c:Page)-(q*1..2]->(Page:Page)
其中r.rating5
返回提取(n个节点(p)| n.page_id),计数(p)
按计数排序(p)描述;

如果没有标签,也可以添加
WHERE NOT(()-[:visions]->(a))

是的,出于某种原因,我没有使用方向,这也是我没有得到正确结果的原因之一。我可能在原始帖子中没有正确解释,但我希望计算相同路径的数量,而不是计算路径中的节点数。Hrmm,有趣。可能
返回计数(不同的p)
?我澄清了最初的问题。我不想计算节点的数量,我想返回不同路径的数量。返回计数(不同的p)当我在寻找3时,它会返回5。它返回5的原因是它在计算U1->P1,然后是U1->P1->P2,而它应该只计算U1->P1->P2Ah,也许你的关系匹配应该是
(c:Page)-[q*2]->(Page:Page)
U1->P1->P2
U2->P1->P2
U3->P3->P4
P1,P2  2
P3,P4  1
MATCH p=(a)-[r:VISITS]-(b:Page)-[t:VISITS]-(page:Page) WHERE r.rating<2 AND t.rating>5 WITH EXTRACT (n IN nodes(p)|n.page_id) AS my_pages,t AS rels RETURN DISTINCT(my_pages) AS pages,count(DISTINCT rels) as count;
MATCH p=(a:User)-[r:VISITS]->(b:Page)-[t:VISITS]->(c:Page)-[q*1..2]->(page:Page)
  WHERE r.rating<2 AND t.rating>5
  RETURN EXTRACT (n IN nodes(p)|n.page_id) ,count(p)
  ORDER BY count(p) DESC;