Skip to main content
 首页 » 编程设计

python之如何用 Python 为 neo4j 定义遍历

2025年05月04日9zlslch

我需要使用 Python27 遍历一个 neo4j 图。

从手册中我看到我可以定义一个 Traversal 并包含一个 Evaluator 并且我得到了类似的东西。

def my_evaluator(path): 
    if (path.end['type'] == 'STOP') or (path.end['type'] == 'BUS_STOP'): 
        return Evaluation.EXCLUDE_AND_CONTINUE 
    else: 
        return Evaluation.INCLUDE_AND_CONTINUE 
 
def get_passengers_with_bus_stop(db, start_node): 
    nodes = [] 
 
    traverser = db.traversal()\ 
        .relationships('STOPS_AT', INCOMING)\ 
        .relationships('HAS_BEEN', OUTGOING)\ 
        .evaluator(my_evaluator)\ 
        .traverse(start_node) 
 
    # Name 
    for n in traverser.nodes.iterator(): 
        nodes.append(n['name']) 
 
    return nodes 

但是我想从返回的节点列表中排除第一个节点,有时会停在某个深度。

如何使用定义 de neo4j 手册的遍历来做到这一点?

有时我发现一个演示文稿解释了定义遍历 的另一种方法,但这不能正常运行,我从 Python 收到错误。我需要安装其他东西吗?

class Users(neo4j.Traversal): # Traversals ! queries in Neo4j 
    types = [ neo4j.INCOMING.WORKS_AS,neo4j.OUTGOING.BELONGS_TO] 
    order = neo4j.BREADTH_FIRST 
    stop = neo4j.STOP_AT_END_OF_GRAPH 
    returnable = neo4j.RETURN_ALL_BUT_START_NODE 

如何使用 Python 为 neo4j 定义遍历以:

  • 排除第一个节点
  • 停在某个深度

也许我应该使用子遍历?我该如何定义它们?

更具体地说,我想在此图上定义一个遍历,从这里的节点“我是”到节点“-1”或单独的节点“+1”。该图定义了关系的方向和它们的名称。

请您参考如下方法:

您可以链接多个评估器来实现此目的。要跳过起始节点,请添加一个如下所示的求值器:

def exclude_start_node(path): 
    if len(path) == 0: 
        return Evaluation.EXCLUDE_AND_CONTINUE 
 
    return Evaluation.INCLUDE_AND_CONTINUE 

然后在某个给定的深度停止,像这样:

def stop_at_depth(depth): 
    def evaluator(path): 
        if len(path) >= depth: 
            return Evaluation.INCLUDE_AND_PRUNE 
 
        return Evaluation.INCLUDE_AND_CONTINUE 
    return evaluator 

你会像这样使用它:

t = db.traverse().evaluator(stop_at_depth(5)).evaluator(exclude_start_node) 

请注意这两个遍历器如何在它们不“应用”的地方使用 INCLUDE_AND_CONTINUE。链接评估器时,限制性最强的评估器将获胜。因此,如果任何评估者说“EXCLUDE”,则当前节点将被排除,如果任何评估者说“PRUNE”,遍历将停止当前路径。

此外,截至上周,最新版本的 neo4j 嵌入式绑定(bind)允许您执行密码查询。您可能想研究一下,因为它可能是编写您正在查看的查询的一种更简单的方法。

http://docs.neo4j.org/chunked/milestone/python-embedded-reference-cypher.html