超过3层级联查询时,每级限制个数,多个with该如何配合使用?
发布于 3 年前 作者 chao_0813 509 次浏览 来自 问答

以下是我自己编辑的查询脚本,但执行报错了: MATCH p1=(:entity)–>(n:entity) WITH p1,n SKIP 0 LIMIT 100 MATCH p2=(n:entity)–>(n1:entity) WITH p2,n1 SKIP 0 LIMIT 100 MATCH p3=(n1:entity)–>(n2:entity) RETURN p1,p2,p3 SKIP 0 LIMIT 300 谁能帮忙解决一下吗?感谢!

7 回复

下面是调整好的Cypher

MATCH p1=(:entity)–[]->(n:entity)
	WITH p1,n SKIP 0 LIMIT 100 
MATCH p2=(n)–[]->(n1:entity) 
	WITH p1,p2,n1 SKIP 0 LIMIT 100 
MATCH p3=(n1)–[]->(n2:entity)  
	RETURN p1,p2,p3 SKIP 0 LIMIT 300

另外在查询时 ,最好显式指定标签类型、关系类型,可读性更好;在数据网络复杂时,不容易引起性能问题

谢谢您的回复

以下脚本,如何将e.entityName中的每个实体都控制在指定数量的关系中,比如牛和马,用一条语句完成,以下我写的脚本,这种写法不能将所有实体都查出来: MATCH p1=(e:entity)–[er:ENTITY_RELATION]->(n:entity) where e.entityName in [‘家牛’,‘原牛’,‘乳牛’,‘大海牛’,‘海福特牛’,‘海牛目’,‘犏牛’,‘瘤牛’,‘西门塔尔牛’,‘野牦牛’,‘野牛’,‘家山羊’,‘山羊’,‘羊’,‘羚羊’,‘黄羽乌骨鸡’,‘牛肉’,‘病原菌’,‘甲状腺肿’,‘血友病’,‘足癣’,‘皮肤病’,‘猛禽’,‘黑变病’,‘牛’,‘驴’,‘马’,‘鹿’,‘兔’,‘犬’,‘猪’] WITH p1,n SKIP 0 LIMIT 300 MATCH p2=(n)–[er:ENTITY_RELATION]->(n1:entity) RETURN p1,p2 SKIP 0 LIMIT 1000

//定义控制参数【类似的可以定义每一层的参数】
WITH [{entityName:'牛',rel_skip:0,rel_limit:10},{entityName:'马',rel_skip:0,rel_limit:10}] AS list
UNWIND list AS map
WITH map.entityName AS entityName,map.rel_skip AS skip,map.rel_limit AS limit
//列表中元素按个开始抽取关系
CALL apoc.cypher.run('MATCH p1=(e:entity)–[er:ENTITY_RELATION]->(n:entity) where e.entityName=$entityName WITH p1,n SKIP '+skip+' LIMIT '+limit+' MATCH p2=(n)–[er:ENTITY_RELATION]->(n1:entity) RETURN p1,p2 SKIP 0 LIMIT 1000',{entityName:entityName}) YIELD value 
RETURN value

1646898083(1).jpg

以上就是运行你写的代码后报的错误,请帮忙看一下

image.png

想要做成如上图这种效果,多个实体并排展示(点击其中一个实体之后还可以显示多级数据),现在按照如下这个脚本,只是显示一个实体数据,如下图:MATCH p1=(e:entity)–[er:ENTITY_RELATION]->(n:entity) where e.entityName in [‘家牛’,‘原牛’,‘乳牛’,‘大海牛’,‘海福特牛’,‘海牛目’,‘犏牛’,‘瘤牛’,‘西门塔尔牛’,‘野牦牛’,‘野牛’,‘家山羊’,‘山羊’,‘羊’,‘羚羊’,‘黄羽乌骨鸡’,‘牛肉’,‘病原菌’,‘甲状腺肿’,‘血友病’,‘足癣’,‘皮肤病’,‘猛禽’,‘黑变病’,‘牛’,‘驴’,‘马’,‘鹿’,‘兔’,‘犬’,‘猪’] WITH p1,n SKIP 0 LIMIT 300 MATCH p2=(n)–[er:ENTITY_RELATION]->(n1:entity) RETURN p1,p2 SKIP 0 LIMIT 1000

看报错是apoc库没有安装需要,安装一下这个库

回到顶部