不能使用Cypher使用shortestPath执行条件查询

时间:2016-06-06 16:15:48

标签: neo4j cypher

我有以下查询:

dotnet build
探索者的话语我在查询的第二部分(后面没有很多内部循环的那部分)得到了很多的点击量。

我想用shortestPath改进它:

MATCH (me:label1{userId:{1}})-[rel:nearby_group]-(group:GROUP)
WHERE NOT ((me)-[:relation_1|relation_2*1..3]-()--(group))
DELETE rel

但是猜测不能在语法上做到:

PROFILE 
MATCH (me:label1{userId:{1}})-[rel:nearby_group]-(group:GROUP)
WHERE NOT shortestPath((me)-[:relation_1|relation_2*1..3]-()--(group))
DELETE rel

任何想法如何在我的查询中使用shortestPath或以其他方式改进它?

来自探查者的截图:

enter image description here

所以我用这种方式修改了查询:

Neo.ClientError.Statement.InvalidSyntax

但是我得到一个空洞的结果。 我希望看到以下关系被删除,它没有:

enter image description here

有什么想法吗?

谢谢, 射线。

1 个答案:

答案 0 :(得分:0)

您的查询应该是正确的,除了在这里使用2个冒号:

(me:BT{userId:{1}})-[rel:nearby_group]-(group:GROUP)

应该是

PROFILE MATCH (me:BT{userId:{1}})-[rel:nearby_group]-(group:GROUP) where not shortestPath((me)-[:relation_1|relation_2*1..3]-()--(group)) delete rel

更新:

此外,shortestPath不接受多种关系模式的定义,更像是(a) - [:TO *] - >(b)

这个可以在我的浏览器中使用:

PROFILE MATCH (me:BT{userId:{1}})-[rel:nearby_group]-(group:GROUP) where not shortestPath((me)-[:relation_1|:relation_2*..3]-(group)) delete rel

shortestPath doc

  

这意味着:只要找到两个节点之间的单个最短路径即可   路径长度最多为15个。在括号里面你   定义路径的单个链接 - 起始节点,连接   关系和结束节点。特征描述   关系类型,最大跳数和方向都是关系   找到最短路径时使用。如果有WHERE子句   在shortestPath的匹配之后,相关的谓词将是   包含在shortestPath中。如果谓词是NONE()或ALL()on   路径的关系元素,它将在使用期间使用   搜索以提高绩效

http://neo4j.com/docs/developer-manual/current/#query-shortest-path