首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在neo4j中创建关系的有效方法

在neo4j中创建关系的有效方法
EN

Stack Overflow用户
提问于 2018-03-22 08:37:45
回答 1查看 374关注 0票数 2

我有一个由数千个节点填充的neo4j数据库,没有定义任何关系。我有一个包含节点之间关系的文件,所以我想在数据库中创建这些节点之间的关系。我目前的做法是:

代码语言:javascript
复制
from py2neo import NodeSelector,Graph,Node,Relationship
graph = Graph('http://127.0.0.1:7474/db/data')
tx = graph.begin()
selector = NodeSelector(graph)
with open("file","r") as relations:
    for line in relations:
        line_split=line.split(";")
        node1 = selector.select("Node",unique_name=line_split[0]).first()
        node2 = selector.select("Node",unique_name=line_split[1]).first()
        rs = Relationship(node1,"Relates to",node2)
        tx.create(rs)
tx.commit()

当前的方法需要对数据库进行2次查询,以获得节点以形成关系+关系创建。考虑到当前数据库中存在节点,是否有更有效的方法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-22 08:48:22

您可以在填充关系时使用某种形式的节点缓存:

代码语言:javascript
复制
from py2neo import NodeSelector,Graph,Node,Relationship
graph = Graph('http://127.0.0.1:7474/db/data')
tx = graph.begin()
selector = NodeSelector(graph)
node_cache = {}

with open("file","r") as relations:
    for line in relations:
        line_split=line.split(";")

        # Check if we have this node in the cache
        if line_split[0] in node_cache:
            node1 = node_cache[line_split[0]]
        else:
            # Query and store for later
            node1 = selector.select("Node",unique_name=line_split[0]).first()
            node_cache[line_split[0]] = node1

        if line_split[1] in node_cache:
            node2 = node_cache[line_split[1]]
        else:
            node2 = selector.select("Node",unique_name=line_split[1]).first()
            node_cache[line_split[1]] = node2

        rs = Relationship(node1,"Relates to",node2)
        tx.create(rs)

tx.commit()

使用上面的内容,您将只加载每个节点一次,并且只有当该节点出现在您的输入文件中时。

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

https://stackoverflow.com/questions/49423946

复制
相关文章

相似问题

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