Neo4j 塞弗:那里的一切都没有按预期进行
所以我的问题是“超级路径查找问题” 这里的相关节点是: 路由:整个路径对象 tRouteSegment:路由和不同段(组成完整路径)之间的逻辑链接(ps:我知道这可以用关系更好地表示,但是数据库就是这样做的:S) oms:物理路径段本身 validochpath:或多或少与这个问题无关;路由的顶级实体 我现在面临的实际问题也是如此;下面是上述问题的一个有效解决方案,但是,我想通过减少第4行中必须搜索的路线来优化查询Neo4j 塞弗:那里的一切都没有按预期进行,neo4j,cypher,Neo4j,Cypher,所以我的问题是“超级路径查找问题” 这里的相关节点是: 路由:整个路径对象 tRouteSegment:路由和不同段(组成完整路径)之间的逻辑链接(ps:我知道这可以用关系更好地表示,但是数据库就是这样做的:S) oms:物理路径段本身 validochpath:或多或少与这个问题无关;路由的顶级实体 我现在面临的实际问题也是如此;下面是上述问题的一个有效解决方案,但是,我想通过减少第4行中必须搜索的路线来优化查询 MATCH (vp:validochpath {"some ID HERE"})
MATCH (vp:validochpath {"some ID HERE"})-->(ort:route)<--
(rs:tlroutesegment)-->(oms:oms)
WITH collect(oms) AS omsNodes
MATCH (ort:route)
WHERE ALL(x in omsNodes WHERE (ort)<--(:tlroutesegment)-->(x))
WITH ort
MATCH (ort)--(vp:validochpath)
RETURN *
MATCH(vp:validochpath{“这里的某个ID”)-->(ort:route)(oms:oms)
将收集(oms)作为oms节点
比赛(ort:路线)
其中所有(OMS节点中的x,其中(ort)(x))
用ort
匹配(ort)--(vp:validochpath)
返回*
这就是新查询的样子,正如您可以看到的,我使用关系过滤掉了许多路由节点
MATCH (vp:validochpath {onepID:"some ID HERE"})-->(ort:route)<--
(rs:tlroutesegment)-->(oms:oms)<--(rs2:tlroutesegment)
WITH rs2, collect(oms) AS omsNodes
MATCH (rs2)-->(ort2:route)
WHERE ALL(x in omsNodes WHERE (x)<--(:tlroutesegment)-->(ort2))
MATCH (ort2)--(vp:validochpath)
RETURN *
MATCH(vp:validochpath{onepID:“此处的某些ID”})-->(ort:route)(oms:oms)(ort2:route)
其中全部(OMS节点中的x,其中(x)(ort2))
匹配(ort2)--(vp:validochpath)
返回*
问题是,这个查询似乎并没有过滤掉任何带有WHERE ALL的节点,而只是返回所有内容。在第二个查询中,
WHERE
子句接受所有匹配项
从第一个MATCH
子句中,我们知道rs2
是一个tlroutesegment
,并且omsNodes
中的所有节点都与rs2
相关。从第二个MATCH
子句中,我们还知道ort2
与rs2
相关。您的WHERE
子句正在检查omsNodes
中的所有节点是否与tlroutesegment
相关,该段也与ort2
相关。由于rs2
是tlroutesegment
,因此此测试始终成功
如果要测试是否存在与rs2
不同的tlroutesegment
节点路径,请尝试以下WHERE
子句:
WHERE ALL(x in omsNodes WHERE
SIZE([(x)<--(y:tlroutesegment)-->(ort2) WHERE y <> rs2 | y]) > 0)
WHERE ALL(OMS中的x节点在何处
尺寸([(x)(ort2),其中y rs2 | y])>0)
很抱歉,为了进一步澄清我的意图,这里是我之前就同一问题提出的一个问题。最终有效的查询是本主题中发布的第一个查询,但我发现它花费的时间太长,我正在尝试想出一种方法来预过滤一些需要搜索的路由节点。