Performance 获取节点邻居之间的所有关系

Performance 获取节点邻居之间的所有关系,performance,neo4j,cypher,Performance,Neo4j,Cypher,我有一个节点(twitter用户)和定向边(如下)的嵌入式图形数据库 我试图获取用户(集合A)之间的所有关系,这些用户后面跟着一个指定的用户(节点U)。还包括A中的节点与指定节点U之间的关系 我的问题是: START u=node:user_id(user_id={id_of_U}) MATCH p = u-->following, p2= following-[?]->u, p3 = following-[?]->()<--u RETURN distinct rels(

我有一个节点(twitter用户)和定向边(如下)的嵌入式图形数据库

我试图获取用户(集合A)之间的所有关系,这些用户后面跟着一个指定的用户(节点U)。还包括
A
中的节点与指定节点
U
之间的关系

我的问题是:

START u=node:user_id(user_id={id_of_U})
MATCH p = u-->following, p2= following-[?]->u, p3 = following-[?]->()<--u
RETURN distinct rels(p),rels(p2),rels(p3) 
START u=node:user\u id(user\u id={id\u of\u})
匹配p=u-->following,p2=following-[?]->u,p3=following-[?]->()你能试试这个吗

start u=node:user_id(user_id={id_of_U})
MATCH u-[r]->following
with u, r, following
match following-[r2?]->u, following-[r3?]->()<-[r4]-u
RETURN distinct r, r2, r3, r4
start u=node:user\u id(user\u id={id\u of\u})
匹配u-[r]->以下内容
有u,r,跟在后面
匹配跟踪-[r2?]->u,跟踪-[r3?]->(从
p=u-->开始跟踪
不是最优的,因为它需要所有相关节点,稍后您会尝试在这些节点上进行筛选。我建议选择较少的节点,稍后再稍微扩展此集合:

START u=node:user_id(user_id={id_of_U})
MATCH u-[:FOLLOWS]->following
WITH u,following
MATCH u-[r]-following
RETURN distinct r;
这将为您提供setA中节点之间的所有关系,这些节点也被节点U跟踪

如果你没有在你的图形中遵循关系-你应该有,否则你的图形设计不是最优的。我注意到您在查询中没有使用任何特定的rel类型-当且仅当您的数据中只有1种关系类型时,这可能是最佳的。据我所知,你的问题不止一个rel类型

编辑:

START u=node:user_id(user_id={id_of_U})
MATCH u-[]-following
WITH u, following
MATCH u-[r]-again, again-[r2]-following
RETURN r, r2

我使用的是1.8.1,但现在升级到1.9并尝试了您的查询,但没有任何更改…您的查询只给出了
u
后面的
之间的关系。。。我还想得到
跟随[m]
-
跟随[n]
之间的所有关系,其中
跟随[m]
跟随[n]
是set
A
的元素。这是我无法处理的棘手部分。(顺便说一句,我的图表有一种关系,如下)thx,我更新了我的答案,重点是将setA两次匹配到两个不同的变量中,然后再匹配这些变量之间的REL。如果这仍然会达到堆限制,恐怕唯一的方法就是使用gremlin并严格定义算法。实际上,您建议的查询导致了堆错误,但添加一个带有
,解决了该问题
START u=node:user_id(user_id='109537107')匹配u-[]->跟在u后面,跟在u-[r]->再跟在后面,再跟在r后面-[r3]->返回r,r3
然而,我做了另一个实现,首先我得到
u
后面的所有节点的id。然后将它们作为参数传递两次,如
START u=node({nodeIdList}),u2=node({nodeIdList2})MATCH u-[r]>u2,u2-[r2]>u返回不同的r,r2
,这提供了最快的解决方案。也许我们应该等待neo4j的新版本……但是您关于将
一起使用的建议很重要,这让我对cypher的工作方式有了更多的了解。谢谢。如果几天内没有其他答案能做得更好,我会接受你的答案,认为你解决了这个问题。我只是想等待,确保我们没有更好的选择。升级查询做得好。有时,某些问题无法用neo4j以有用的方式解决-例如,当有一个超级节点或查询中匹配的元素数量太多时-这是一个计算问题,而不是软件问题,因此我担心neo4j在这方面永远不会变得更好。在这种情况下,我建议您使用gremlin构建自己的图形算法,或者使用完全不同的技术,可能是在服务器集群上使用apachehadoop和minhash。