最近完成了一个项目使用了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","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 8
执行分页条2条
希望能给和我一样初次使用的人一些帮助。