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

时间:2014-06-06 05:00:41

标签: neo4j cypher

我需要找到N个节点"最近的"到图中的给定节点,意味着沿给定节点的路径具有最小组合权重的节点。 是否可以使用纯Cypher解决方案?我正在寻找路径功能,但无法找到表达我的查询的可行方法。

此外,是否可以根据其类型/标签(或以其他方式将关系类型映射到权重)在查询时为关系指定默认权重?我们的想法是尝试不同的权重,而不必为每个关系更改属性。 否则,我必须将权重属性的值更改为每个关系,并在每个查询之前重新执行,这非常耗时(我的图表有大约10M的关系)。 再一次,纯粹的Cypher解决方案将是最好的,或者请指出我正确的方向。

1 个答案:

答案 0 :(得分:2)

请使用可变长度的Cypher查询从单个节点中查找最近的节点。

MATCH (n:Start { id: 0 }),
  (n)-[:CONNECTED*0..2]-(x)
RETURN x

请注意,语法[CONNECTED*0..2]是一个范围参数,用于指定与给定节点的最小和最大关系距离,关系类型为CONNECTED

您可以将此关系类型换成其他类型。

如果您想要从起始节点到周围节点可变地遍历但是通过停止标准约束到阈值,那就更难了。对于这些类型的东西,熟悉Neo4j的空间插件是很有用的。在这篇博客文章中可以找到了解有关Neo4j空间的更多信息的良好起点:http://neo4j.com/blog/neo4j-spatial-part1-finding-things-close-to-other-things

该帖子有点过时,但如果你进行一些Google搜索,你可以找到更多更新的资料。

GitHub存储库:https://github.com/neo4j-contrib/spatial