Neo4j导入CSV文件(实体和关系)

文章介绍了如何启动Neo4j数据库,利用CSV数据样例进行实体和关系的导入,并提供了导入后的查询和删除数据的方法。此外,还讲解了如何从本地任意路径读取CSV文件进行导入。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Neo4j启动

打开cmd切换到neo4j安装目录的bin下,输入以下命令

neo4j console

CSV数据样例

实体

在这里插入图片描述

关系

在这里插入图片描述

生成CSV代码

def write2csv2(entities, relations):
    out_path = r'D:\Neo4j\XXX\import'
    entity_types = {"装备": "equipment", "组织": "organization"}
    relation_types = {'配备': 'Equip'}
    for et in entity_types:

        with open(os.path.join(out_path, entity_types[et] + '.csv'), 'w', newline='', encoding='utf-8') as file:
            writer = csv.writer(file)

            # 写入数据
            writer.writerow([entity_types[et]])

            for e in entities:
                if e['label'] == et:
                    writer.writerow([e['text']])

    for rt in relation_types:
        with open(os.path.join(out_path, relation_types[rt] + '.csv'), 'w', newline='', encoding='utf-8') as file:
            writer = csv.writer(file)

            # 写入数据
            writer.writerow(["from_entity", "to_entity"])

            for r in relations:
                if r['type'] == rt:
                    # print(r['from_entity']['label'])
                    writer.writerow(
                        [r['from_entity']['text'],
                         r['to_entity']['text']])

    # 关闭CSV文件
    file.close()

导入实体

load csv with headers
from 'file:///entity.csv' as line
fieldterminator ','
create (
	p:entity_name{
    	entity_name: line.entity_name
    }
)

导入关系

load csv with headers from "file:///relation.csv"
as row
merge (f1:from_entity_name{name:row.from_entity})
merge (f2:to_entity_name{name:row.to_entity})
merge (f1)-[r:relation_name]->(f2)

查询实体

MATCH (n) RETURN n

MATCH (n) RETURN n LIMIT 25

查询关系

MATCH p=()-->() RETURN p

MATCH p=()-[r:relation_name]->() RETURN p LIMIT 25

删除所有数据

match (n) detach delete n

读取本地任意路径CSV文件

如果想读取不在import directory中的CSV,则:
(1)先改变neo4j默认设置,即:删除dbms.directories.import=import或者在该语句前加“#”;
(2)使用 “LOAD CSV FROM file:///C:/XXX/name.csv”(即:file:///+绝对路径), 导入本地CSV文件 。

### 导入CSV文件并在Neo4j中创建节点间的关系 为了在Neo4j数据库中成功导入CSV文件并建立节点间的关联,可以遵循官方推荐的方法以及一些最佳实践。具体操作涉及准备CSV文件、启动Neo4j实例(如果尚未运行)、执行必要的Cypher查询来加载数据。 #### 准备工作 确保CSV文件格式正确无误非常重要。当使用`LOAD CSV`命令时不带`WITH HEADERS`子句时,Neo4j会默认把首行视为实际的数据而非列名[^4]。因此,在构建CSV文件时应考虑到这一点,要么让第一行列出字段名称,并配合`WITH HEADERS`选项;要么直接从第二行开始放置纯数据记录而不指定头部信息。 对于想要定义实体之间联系的情况,则需额外提供描述这些连接特性的边表(edge table),通常至少包含源ID(Source ID)目标ID(Target ID)两列用于指明哪两个顶点应当相连。 #### 数据库环境设置 假设已经在Linux环境下通过Docker容器部署好了Neo4j服务[^1],那么接下来就是确认该实例处于可访问状态并且已经启用了批量导入功能。这一步骤可能涉及到调整配置参数如内存分配等以优化性能表现。 #### 执行Cypher语句实现数据迁移与建模 下面给出一段Python风格伪代码作为示例说明如何利用Cypher语言完成上述任务: ```cypher // 假设有两张表格分别存储着用户(user.csv)及其好友关系(friendship.csv) // 首先读取users.csv中的每一行作为一个独立的User节点 USING PERIODIC COMMIT 500 LOAD CSV WITH HEADERS FROM 'file:///path/to/user.csv' AS line FIELDTERMINATOR ',' CREATE (:User {id: toInteger(line.id), name: line.name}); // 接下来处理friendships.csv里的每一对朋友组合形成FriendOf类型的双向链接 USING PERIODIC COMMIT 500 LOAD CSV WITH HEADERS FROM 'file:///path/to/friendship.csv' AS rel FIELDTERMINATOR ',' MATCH (u1:User{id: toInteger(rel.user_id)}),(u2:User{id: toInteger(rel.friend_id)}) MERGE (u1)-[:FRIEND_OF]->(u2); ``` 这段脚本首先遍历所有用户记录生成对应的图谱对象,接着再依据给定的朋友列表建立起相互指向对方的关系路径。这里采用了周期提交机制(`USING PERIODIC COMMIT`)以便于高效地处理大规模数据集而不会因为事务过大而导致失败。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值