Neo4j Cypher,需要一种优化的方式来获得没有1或2度联系的朋友的朋友



我是Neo4j的新手,试图通过不同的路径获得朋友的朋友(那些相距3度的人)的朋友,并且也没有1或2度的关系。我正在使用下面的密码,这似乎需要很多时间

MATCH p=(来源:用户{ID:51})-[:链接*3.3]-(fof:用户)

WHERE NOT(原点)-[:链接*..2]-(fof)

返回fof。Nm

按Nm限值订购1000

分析查询显示,"WHERE NOT"条件占用了大部分时间,因为它将每个结果节点与所有1度和2度节点进行交叉检查。

我是做错了什么,还是有更优化的方法?

只需添加一项,标签User中的属性UsrID已编入索引。

可能有几种方法可以做到这一点

MATCH path = (origin:User {ID:51})-[:LINKED*3..3]-(fofof:User)
WHERE NOT(fofof IN (nodes(path)[0..-1]))
RETURN fofof.Nm
ORDER BY fofof.Nm LIMIT 1000

你也可以更明确:

MATCH path = (origin:User {ID:51})-[:LINKED]-(f:User)-[:LINKED]-(fof:User)-[:LINKED]-(fofof:User)
WHERE fofof <> f AND fofof <> fof
RETURN fofof.Nm
ORDER BY fofof.Nm LIMIT 1000

最新更新