neo4j:仅在节跃点上标记参数?
有没有办法将标签类型限制在模式的无限跃点区域内?您将如何在更大的模式中实现这一点neo4j:仅在节跃点上标记参数?,neo4j,Neo4j,有没有办法将标签类型限制在模式的无限跃点区域内?您将如何在更大的模式中实现这一点 WITH n, end OPTIONAL MATCH (n:Label1)<-[:REL2]-(a:Label2)-[:CONSTRICT_HOPS_TO_LABEL*..]->(b)<-[:REL3]-(:Label3)->(end:Label1) WITH b, ... continue 带n,结束 可选匹配(n:Label1)(b)(结束:Label1) 有了b。。。持续 我希望a
WITH n, end
OPTIONAL MATCH (n:Label1)<-[:REL2]-(a:Label2)-[:CONSTRICT_HOPS_TO_LABEL*..]->(b)<-[:REL3]-(:Label3)->(end:Label1)
WITH b, ... continue
带n,结束
可选匹配(n:Label1)(b)(结束:Label1)
有了b。。。持续
我希望a和b之间的部分只包括某个标签的节点
WITH n, end
OPTIONAL MATCH (n:Label1)<-[:REL2]-(a:Label2)-[:CONSTRICT_HOPS_TO_LABEL*..]->(b)<-[:REL3]-(:Label3)->(end:Label1),
p=(a)-[:CONSTRICT_REL_LABEL*..]->(b) WHERE nodes(p):Label
WITH b, ... continue
带n,结束
可选匹配(n:Label1)(b)(结束:Label1),
p=(a)-[:construct_REL_LABEL*。]->(b)其中节点(p):LABEL
有了b。。。持续
有办法做到这一点吗
WITH n, end
OPTIONAL MATCH (n:Label1)<-[:REL2]-(a:Label2)-[:CONSTRICT_HOPS_TO_LABEL*..]->(b)<-[:REL3]-(:Label3)->(end:Label1),
p=(a)-[:CONSTRICT_REL_LABEL*..]->(b)
WHERE ALL(node IN nodes(p) WHERE node:Label)
WITH b, ...continue
带n,结束
可选匹配(n:Label1)(b)(结束:Label1),
p=(a)-[:压缩相关标签*。]->(b)
WHERE ALL(节点中的节点(p),其中节点:标签)
有了b,…继续
由于节点(路径)
是一个节点列表,因此您可以使用索引访问获取路径中节点的相关切片,并将其用于过滤:
...
WITH n, end
OPTIONAL MATCH path = (n:Label1)<-[:REL2]-(a:Label2)-[:CONSTRICT_HOPS_TO_LABEL*..]->(b)<-[:REL3]-(c:Label3)-[:REL4]->(end:Label1),
WHERE ALL(node IN nodes(path)[2..-3] WHERE node:Label)
WITH b, ...
...
。。。
用n,结束
可选匹配路径=(n:Label1)(b)(结束:Label1),
WHERE ALL(节点中的节点(路径)[2..-3]其中节点:标签)
有了b。。。
...
节点(路径)[0..2]
是[n,a]
,因此如果您希望节点超过a
(但不包括a
本身),您可以从2开始
负索引是列表末尾的元素,因此-3
意味着它将排除列表的最后3个元素,包括[b,c,end]
如果您想包括
a
以及b
,那么您的切片将是节点(路径)[1..-2]
,只需注意,找到路径后,标签检查将是一个过滤操作,在路径扩展期间不会检查它。重新构造和依赖rel.property检查会更快吗?例如[rel:construct_HOPS_TO_LABEL*。]rel.boolean在哪里?或者这有什么意义[:construct_HOPS_TO_LABEL*0..1]-(:LABEL)-[:construct_HOPS_TO_LABEL*0..1]-(:LABEL)-[:construct_HOPS_TO_LABEL*0..1]对不起-我在这里进行头脑风暴。。。谢谢这是行不通的;o(过滤为查询增加了荒谬的时间。看起来我需要完全用不同的关系类型重新构造,以使其可行。。。