最近完成了一个项目使用了Neo4j做节点及关系相关图谱功能,在这里记录一下里面使用limit的问题。
需求是这样的,使用neo4j做向下的层级查询,当前节点为中心节点,向下查询2级、3级、4级这样的需求。但是发现当查询4层的时候,比查询3层响应的节点及关系要少。因初次使用neo4j,不知道具体原因,在网上找了很多,没有找到具体原因,只有把cql打印出来。
MATCH p=(n:`39` {id: '测试'})-[:`30`|:`31`|:`89`|:`90`|:`91`*0..4]-(m)
WHERE any(x in labels(m) WHERE x in ["29","32","33","34","35","36","37","38","39","40","41","42","43","44","45","46","47","48","49","50","51","52","53","54","55","56","57","58","59","60","61","62","63","64","65","66","67","68","69","70","71","72","73","74","75","76","77","78","79","80"])
RETURN DISTINCT p
SKIP 0
limit 1000
自己手动一个个条件去掉执行,发现问题,出在limit 1000。这里的limit不是针对节点也不是针对关系。而是针对响应查询出来的数据集进行分页。例如分页8如下响应
MATCH p=(n:`29` {id: "测试"})-[:`30`|:`31`|:`89`|:`90`|:`91`*0..2]-(m)
WHERE any(x in labels(m) WHERE x in ["29","32","33","34","35","36","37","38","39","40","41","42","43","44","45","46","47","48","49","50","51","52","53","54","55","56","57","58

本文探讨了在Neo4j中使用limit关键字对层级查询性能的影响,发现limit并非针对节点或关系,而是影响返回数据集的分页,案例揭示了查询深度和结果数量的关系,并提供了解决初次使用者疑问的实践建议。
最低0.47元/天 解锁文章
297





