Graph neo4j中的A*搜索

Graph neo4j中的A*搜索,graph,neo4j,Graph,Neo4j,我想用neo4j在有向无环图中搜索最短路径。我有一个类似的图表: 我想找到从根到第3层的路径。在每一层我都有不同的属性集,我可以使用这些属性和用户输入来计算权重。我需要使用*或其他搜索算法找到所有动态权重最小的最短路径(可能有多条权重相等的路径)。neo4j和cypher或gremlin有可能吗 我不想使用嵌入式版本,因为我的项目是用python编写的,所以我不能使用据我所知可以做到这一点的java库。到目前为止,Cypher不允许您传入函数,例如成本函数。添加此功能必须非常谨慎,因为通过查询

我想用neo4j在有向无环图中搜索最短路径。我有一个类似的图表:

我想找到从
第3层
的路径。在每一层我都有不同的属性集,我可以使用这些属性和用户输入来计算权重。我需要使用*或其他搜索算法找到所有动态权重最小的最短路径(可能有多条权重相等的路径)。neo4j和cypher或gremlin有可能吗


我不想使用嵌入式版本,因为我的项目是用python编写的,所以我不能使用据我所知可以做到这一点的java库。

到目前为止,Cypher不允许您传入函数,例如成本函数。添加此功能必须非常谨慎,因为通过查询语言注入可运行代码会带来一些安全问题

也就是说,您现在可以做的是:创建一个连接到Neo4j服务器的连接。在非托管扩展中,您可以使用提供的。使用JAX-RS参数,您可以提供数据来标识遍历的开始节点和结束节点,并让graph算法来完成这些脏活

您可能想看看,这是一个使用
gradle
作为构建系统的简约示例项目


然而,这个粗略的想法涉及到服务器端部分的Java编码。客户端您可以使用任意堆栈。

目前,Cypher不允许您传入函数,例如成本函数。添加此功能必须非常谨慎,因为通过查询语言注入可运行代码会带来一些安全问题

也就是说,您现在可以做的是:创建一个连接到Neo4j服务器的连接。在非托管扩展中,您可以使用提供的。使用JAX-RS参数,您可以提供数据来标识遍历的开始节点和结束节点,并让graph算法来完成这些脏活

您可能想看看,这是一个使用
gradle
作为构建系统的简约示例项目


然而,这个粗略的想法涉及到服务器端部分的Java编码。客户端您可以使用任何您喜欢的堆栈。

如果是DAG,那么在任何两个节点之间不是最多只有一条路径吗?A*似乎有点过火,但它是如何实现的;一个简单的DFS(在所需的级别切断)就可以完成这项工作。是否有可能使用gremlin或(更好的)cypher?我发现了这一点-它看起来像是我问题的答案。很难让cypher最短路径函数发挥成本/重量的作用。在一个小图上,您可以编写密码匹配所有路径,计算每个路径的成本,并返回最便宜的路径。在更大的图上,你们可以使用一个REST调用来使用Dijkstra:若它是一个DAG,在任意两个节点之间不是最多只有一条路径吗?A*似乎有点过火,但它是如何实现的;一个简单的DFS(在所需的级别切断)就可以完成这项工作。是否有可能使用gremlin或(更好的)cypher?我发现了这一点-它看起来像是我问题的答案。很难让cypher最短路径函数发挥成本/重量的作用。在一个小图上,您可以编写密码匹配所有路径,计算每个路径的成本,并返回最便宜的路径。在更大的图上,您可以执行REST调用来使用Dijkstra:代价表达式并不危险。:)成本表达式并不危险。:)