寻找neo4j

时间:2015-07-10 09:58:42

标签: python neo4j py2neo

我需要使用cypher查询或python客户端库(如pye2neo)在neo4j中找到数据库的LCA。

我知道要执行此操作的算法,例如here。但是在我自己在python中实现一个算法之前,我想知道是否有一个内置的方法用于这个或其他一些预先存在的包。

目前我的方法包括:

Query = 'match p1 = (con1) -[*0..]-> (common) <-[*0..]- (con2) 
where con1.name = A and con2.name = B 
return common, p1'

用于启动节点A和B

  1. 执行任意两个起始节点的查询。这将返回共同的祖先及其路径。
  2. 对于查询中的每个剩余节点(例如C,D,E ...),执行该节点和先前返回的父节点的查询。这个父母取代了前一个。
  3. 找到的最后一位父母是LCA
  4. Psuedo代码:

    input_nodes = [A, B, C, D, E]
    
    parent = get_common(input_nodes[0], input_nodes[1])
    for node in input_nodes[2:]:
        parent = get_common(parent, node) 
    

    总结:是否有一种简单的内置/预先存在的方法,可以使用python客户端库或cypher从可变数量的输入节点中查找LCA?

    由于

1 个答案:

答案 0 :(得分:0)

我有点困惑。 “查询中剩余的节点”是什么意思?

听起来像ShortestPath的修改版本会很有用。它是双向的,默认情况下,它从端节点以相反的方向搜索。如果双方在哪里使用相同的方向(说出去),那么你将达到最低的共同祖先(至少在我低调你的问题时)。