首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何用Python定义用于neo4j的遍历?

如何用Python定义用于neo4j的遍历?
EN

Stack Overflow用户
提问于 2011-11-22 18:19:47
回答 1查看 1.1K关注 0票数 2

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

从手册中我看到,我可以定义一个遍历,并包含一个计算器,并且我得到了类似的东西。

代码语言:javascript
运行
复制
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 手册的遍历来实现这一点?

有时,我找到了一种演示文稿,它解释了定义遍历的另一种方法,但这不能正常运行,我从Python那里接收并出错。我还需要安装别的东西吗?

代码语言:javascript
运行
复制
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定义一个遍历:

  • 不包括第一个节点
  • 停在某个深度

也许我该用subtraversals?我该如何定义它们?

更具体地说,我想在这个图上定义一个遍历,使其从节点"I'm“到节点"-1”或节点"+1“。图定义了关系的去方向和它们的名称。

EN

回答 1

Stack Overflow用户

发布于 2011-12-12 12:15:56

您可以链接多个评估器来实现这一点。若要跳过开始节点,请添加如下所示的评估器:

代码语言:javascript
运行
复制
def exclude_start_node(path):
    if len(path) == 0:
        return Evaluation.EXCLUDE_AND_CONTINUE

    return Evaluation.INCLUDE_AND_CONTINUE

在一定的深度上停下来,就像这样:

代码语言:javascript
运行
复制
def stop_at_depth(depth):
    def evaluator(path):
        if len(path) >= depth:
            return Evaluation.INCLUDE_AND_PRUNE

        return Evaluation.INCLUDE_AND_CONTINUE
    return evaluator

你会像这样使用它:

代码语言:javascript
运行
复制
t = db.traverse().evaluator(stop_at_depth(5)).evaluator(exclude_start_node)

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

此外,从上周起,新4j嵌入绑定的最新版本允许您执行密码查询。您可能需要研究这一点,因为这可能是编写正在查看的查询的一种更容易的方法。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8231705

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档