我正在试图弄清楚如何在一个非常大的数据集上优化cypher查询。我在找同城的二级或三级朋友。我当前的cypher查询是,运行时间超过1分钟:
match (n:User {id: 123})-[:LIVES_IN]->()<-[:LIVES_IN]-(u:User), (n)-[:FRIENDS_WITH*2..3]-(u) WHERE u.age >= 20 AND u.age <= 36 return u limit 100大约有500K个用户节点和500M个FRIENDS_WITH关系。我已经有了id和age属性的索引。查询似乎被FRIENDS_WITH要求卡住了。有没有办法以不同的方式考虑这一点,或者优化cypher以使其实时(即最大时间1-2秒)?
以下是查询的配置文件:

谢谢。
发布于 2016-02-02 01:46:04
为标签用户的id属性创建索引:
CREATE INDEX ON :User(id)有关更多信息,请参见架构索引文档http://neo4j.com/docs/stable/query-schema-index.html
如果这不能帮助您添加PROFILE查询的结果,我们也许可以为您提供更多帮助
PROFILE MATCH ... rest of your query另外,尝试用以下方式重写查询也是值得的:
MATCH (n:User {id: 123})-[:LIVES_IN]->()<-[:LIVES_IN]-(u:User),
(n)-[:FRIENDS_WITH*2..3]-(u)
WHERE u.age >= 20 AND u.age <= 36
return u limit 100https://stackoverflow.com/questions/35136302
复制相似问题