我有以下查询:
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或以其他方式改进它?
来自探查者的截图:所以我用这种方式修改了查询:
Neo.ClientError.Statement.InvalidSyntax
但是我得到一个空洞的结果。 我希望看到以下关系被删除,它没有:
有什么想法吗?
谢谢, 射线。
答案 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