我是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