对于像MATCH (node0 {id: 1})-[:REL*]->(nodeN)
这样的比赛,
是否有以下方面的保证:
- 比赛是深度优先/呼吸优先?
- 匹配从一个节点到一个关系或另一个关系的分支?
在此基础上进行实验,对于相同的数据集(通过每次以相同顺序创建的实体的集成测试创建),两个Neo4j示例(一个在docker中通过GitHub操作运行,另一个在docker桌面上)似乎具有:
- 相同的深度优先语义
- 不同的分支顺序
是否有任何Cypher参数影响1)DFS与BFS行为2)从一个节点的遍历顺序,即基于关系属性
我知道有一些遍历(即树生成)算法可以做类似的事情,但我还不想探究它们,因为它们在属性过滤方面有更多限制(只能按标签过滤)
2条答案
按热度按时间qni6mghb1#
我不认为有任何参数可以正确地做这些事情。
1.DFS与BFS->路径匹配仅为DFS。对于查询
MATCH (node0 {id: 1})-[:REL*]->(nodeN)
,第一个密码将以一跳距离获得nodeN
。然后,它将从该节点遍历并继续前进。注意这一点的一个好方法是查看以下查询的输出:MATCH (n{id: 1})-[r:REL*]->(nodeN) return n, nodeN, r
1.我们不能使用某些性质来影响遍历顺序。没有这样的关键字,
WHERE
子句将过滤出结果,ORDER BY
将对最终结果进行排序,但目前没有任何东西可以在内部影响遍历。lnxxn5zx2#
我不认为你能在纯密码中做到这一点。但是,如果您需要从
MATCH
获得可预测的结果,您可以尝试使用标识属性(内部ID不适用于您的情况,因为您运行的是两个数据库)所以至少你得到的结果总是以相同的顺序出现。