首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >导入到Neo4j的最快方法是什么?

导入到Neo4j的最快方法是什么?
EN

Stack Overflow用户
提问于 2015-12-06 14:29:01
回答 1查看 701关注 0票数 1

我有一个JSON文档列表,格式如下:

代码语言:javascript
运行
复制
[{a:1, b:[2,5,6]}, {a:2, b:[1,3,5]}, ...]

我需要做的是使用参数a创建节点,并将它们连接到列表b中具有a值的所有节点。因此,第一个节点将连接到节点2、5和6。现在,我正在使用Python的neo4jrestclient进行填充,但这需要很长时间。有更快的方法来填充吗?

目前,这是我的脚本:

代码语言:javascript
运行
复制
break_list = []
for each in ans[1:]:
    ref = each[0]
    q = """MATCH n WHERE n.url = '%s' RETURN n;""" %(ref)
    n1 = gdb.query(q, returns=client.Node)[0][0]
    for link in each[6]:
        if len(link)>4:
            text,link = link.split('!__!')
            q2 = """MATCH n WHERE n.url = '%s' RETURN n;""" %(link)
            try:
                n2 = gdb.query(q2, returns=client.Node)
                n1.relationships.create("Links", n2[0][0], anchor_text=text)
            except:
                break_list.append((ref,link))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-07 21:16:20

您可能需要考虑将JSON转换为CSV (使用一些类似于jq),然后可以使用LOAD CSV Cypher工具进行导入。LOAD CSV是为数据导入而优化的,因此使用这种方法可以获得更好的性能。在您的示例中,LOAD CSV脚本将如下所示:

您的JSON转换为CSV:

代码语言:javascript
运行
复制
"a","b"
"1","2,5,6"
"2","1,3,5"

首先创建唯一性约束/索引。这将确保只为任何“名称”创建一个节点,并为更快的查找性能创建索引。

代码语言:javascript
运行
复制
CREATE CONSTRAINT ON (p:Person) ASSERT p.name IS UNIQUE;

考虑到上面的CSV文件,这个Cypher脚本可以用来有效地导入数据:

代码语言:javascript
运行
复制
USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file:///path/to/file.csv" AS row
MERGE (a:Person{name: row.a})
WITH a,row
UNWIND split(row.b,',') AS other
MERGE (b:Person {name:other})
CREATE UNIQUE (a)-[:CONNECTED_TO]->(b);

其他选项

另一个选项是在Cypher查询中使用JSON作为参数,然后使用UNWIND迭代JSON数组的每个元素。

代码语言:javascript
运行
复制
WITH {d} AS json
UNWIND json AS doc
MERGE (a:Person{name: doc.a})
WITH doc, a
UNWIND doc.b AS other
MERGE (b:Person{name:other})
CREATE UNIQUE (a)-[:CONNECTED_TO]->(b); 

尽管非常大的JSON数组可能存在一些性能问题。请参阅此这里这里的一些示例。

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

https://stackoverflow.com/questions/34118491

复制
相关文章

相似问题

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