neo4j - 在 Neo4j 的 Dijkstra 算法中使用不止一次属性

标签 neo4j cypher dijkstra memgraphdb

在 Cypher 中有什么方法可以使用 Dijkstra 算法来计算具有多个属性的最小权重,而不是:

CALL apoc.algo.dijkstra(start, end, 'RELATED_TO>', '1_property') 
yield path, weight

做类似的事情:

  CALL apoc.algo.dijkstra(start, end, 'RELATED_TO>', '1_property+2_property') 
yield path, weight

这对我不起作用。你有什么建议吗?因为我想将路径长度作为对最小权重计算的影响来计算权重。

最佳答案

可以看看Memgraph ,高性能,内存和事务图形数据库。 openCypherBolt兼容的。 (免责声明:我是联合创始人兼首席技术官)。 Memgraph 内置了加权最短路径功能,其中总权重通过用户定义的 lambda 函数计算。基于这个数据集

CREATE (n1 {id: 1}) CREATE (n2 {id: 2}) CREATE (n3 {id: 3}) CREATE (n4 {id: 4})
CREATE (n1)-[:E {weight1: 1, weight2: 1}]->(n2)
CREATE (n1)-[:E {weight1: 2, weight2: 10}]->(n3)
CREATE (n2)-[:E {weight1: 3, weight2: 100}]->(n4)
CREATE (n3)-[:E {weight1: 4, weight2: 1}]->(n4);

Memgraph 的相关查询是

MATCH (a {id: 1})-[
          edges *wShortest (e, n | e.weight1 + e.weight2) total_weight
      ]-(b {id: 4})
RETURN startNode(head(edges)).id +
       reduce(acc = "", edge IN edges | acc + " -> " + endNode(edge).id) AS hops,
       total_weight;

结果如下。

| hops      | total_weight |
|-----------|--------------|
|1 -> 3 -> 4| 17.0         |

关于neo4j - 在 Neo4j 的 Dijkstra 算法中使用不止一次属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50198954/

相关文章:

c# - 将返回值组合成单一类型

neo4j - 通过聚合合并两个 Cypher 语句的输出

variables - Neo4J 在 Cypher 中创建临时变量

Neo4J - 如何避免这个锁问题

hadoop - dijkstra的最短路径算法回溯了吗?

Neo4j APOC 将 CSV 导出到特定目录

java - Spring数据Neo4j(SDN): Nested objects not populated by cypher

java - 通过Java查询远程neo4j服务器

c++ - 是否可以从 C++ 中的二维节点数组创建邻接矩阵?

python - 在 Python 中找到英文维基百科两篇文章之间的最短路径