Neo4j 距离给定节点最近的节点,动态为关系类型分配权重

Neo4j 距离给定节点最近的节点,动态为关系类型分配权重,neo4j,cypher,Neo4j,Cypher,我需要在一个图中找到与给定节点“最近”的N个节点,这意味着从给定节点沿路径的关系组合权重最小的节点。 用纯密码唯一的解决方案可以做到这一点吗?我在寻找路径函数,但找不到一种可行的方法来表达我的查询 此外,是否可以在查询时根据关系的类型/标签为其分配默认权重(或者以某种方式将关系类型映射到权重)?其思想是在不必更改每个关系的属性的情况下,使用不同的权重进行实验。 否则,我必须将权重属性的值更改为每个关系,并在每次查询之前重新执行,这非常耗时(我的图形有大约1000万个关系)。 同样,纯密码解决方案

我需要在一个图中找到与给定节点“最近”的N个节点,这意味着从给定节点沿路径的关系组合权重最小的节点。 用纯密码唯一的解决方案可以做到这一点吗?我在寻找路径函数,但找不到一种可行的方法来表达我的查询

此外,是否可以在查询时根据关系的类型/标签为其分配默认权重(或者以某种方式将关系类型映射到权重)?其思想是在不必更改每个关系的属性的情况下,使用不同的权重进行实验。 否则,我必须将权重属性的值更改为每个关系,并在每次查询之前重新执行,这非常耗时(我的图形有大约1000万个关系)。
同样,纯密码解决方案是最好的,或者请为我指出正确的方向。

请使用可变长度密码查询从单个节点查找最近的节点

MATCH (n:Start { id: 0 }),
  (n)-[:CONNECTED*0..2]-(x)
RETURN x
请注意,语法
[CONNECTED*0..2]
是一个范围参数,指定与给定节点的最小和最大关系距离,关系类型为
CONNECTED

您可以将此关系类型交换为其他类型

如果希望从开始节点到周围节点进行可变遍历,但通过停止条件将其约束到阈值,这就有点困难了。对于这类事情,熟悉Neo4j的空间插件是很有用的。了解更多有关Neo4j spatial的信息,可以在以下博客文章中找到一个很好的起点:

这篇文章有点过时,但如果你在谷歌上搜索一下,你可以找到更多更新的资料


GitHub存储库:

您看过REDUCE吗?您可以轻松地对路径上的关系权重求和,并使用LIMIT k返回具有最小和的k个节点。