在Cypher / Neo4J中找到节点之间连接的最有效方法是什么?

时间:2014-02-13 19:17:31

标签: neo4j cypher graph-databases

我需要找到连接到主用户节点的所有节点(带有“Hashtag”标签)之间的连接。

到目前为止,我提出了这样的解决方案,但在我看来效率有点低,因为我遍历图形两次,先找到c1然后再找到c2。

有人有更好的想法吗?

MATCH (u:User{uid:"777"}), (c1:Hashtag), (c2:Hashtag), 
c1-[:BY]->u, c2-[:BY]->u, c1-[rel:TO]->c2 RETURN rel,c1,c2;

(我正在使用Neo4J / Cypher 2.0)

1 个答案:

答案 0 :(得分:2)

试试这个,玩它并让我知道输出。

MATCH (u:User {uid:"777"})
WITH u
MATCH u<-[:BY]-(c1:Hashtag)-[rel:TO]-(c2:Hashtag)--(u)
RETURN rel, c1, c2

基本上,这里的想法如下:

  1. 首先匹配用户节点
  2. 使用它来匹配所有'Hashtag'节点
  3. 使用它来匹配连接到先前“Hashtag节点”
  4. 的所有“Hashtag”节点
  5. 返回'rel',这是从'Hashtag'节点到连接到用户777的'Hashtag'节点的所有关系