Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neo4j 塞弗:那里的一切都没有按预期进行_Neo4j_Cypher - Fatal编程技术网

Neo4j 塞弗:那里的一切都没有按预期进行

Neo4j 塞弗:那里的一切都没有按预期进行,neo4j,cypher,Neo4j,Cypher,所以我的问题是“超级路径查找问题” 这里的相关节点是: 路由:整个路径对象 tRouteSegment:路由和不同段(组成完整路径)之间的逻辑链接(ps:我知道这可以用关系更好地表示,但是数据库就是这样做的:S) oms:物理路径段本身 validochpath:或多或少与这个问题无关;路由的顶级实体 我现在面临的实际问题也是如此;下面是上述问题的一个有效解决方案,但是,我想通过减少第4行中必须搜索的路线来优化查询 MATCH (vp:validochpath {"some ID HERE"})

所以我的问题是“超级路径查找问题”

这里的相关节点是:

路由:整个路径对象

tRouteSegment:路由和不同段(组成完整路径)之间的逻辑链接(ps:我知道这可以用关系更好地表示,但是数据库就是这样做的:S)

oms:物理路径段本身

validochpath:或多或少与这个问题无关;路由的顶级实体

我现在面临的实际问题也是如此;下面是上述问题的一个有效解决方案,但是,我想通过减少第4行中必须搜索的路线来优化查询

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)

很抱歉,为了进一步澄清我的意图,这里是我之前就同一问题提出的一个问题。最终有效的查询是本主题中发布的第一个查询,但我发现它花费的时间太长,我正在尝试想出一种方法来预过滤一些需要搜索的路由节点。