news 2026/1/17 8:15:35

简单使用FalkorDB和Neo4j图数据库

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
简单使用FalkorDB和Neo4j图数据库

简单使用FalkorDB图数据库

1 介绍

FalkorDB 是一个通过稀疏矩阵和线性代数实现高性能查询的图数据库,专注于为LLM和企业级GraphRAG应用提供超低延迟的知识图谱服务。对中文的支持不太好。

# 官网 https://www.falkordb.com/ # 官方文档 https://docs.falkordb.com/ # Github地址 https://github.com/falkordb/falkordb # cypher语言地址 https://docs.falkordb.com/cypher/

Neo4j 是一个图数据库管理系统,专为存储、查询和处理高度关联的数据而设计,性能相对较差,但是比较成熟、文文档齐全。中文支持很好。

# Python参考文档 https://neo4j.com/docs/python-manual/current/ # cypher语法 https://neo4j.com/docs/getting-started/cypher/ # Github官网 https://github.com/neo4j/neo4j # 语言选择 https://neo4j.com/docs/create-applications/

2 Cypher语法

2.1 Cypher语法核心概念(对应 SQL)

图概念Cypher 关键字类似 SQL
节点(实体)()表中的行
关系(连接)-[]-><-[]-外键连接
属性(数据){key: value}列的值
标签(分类):Label表名
类型(关系):TYPE关系类型

1. 节点标签(Node Labels)

  • 用于分类节点,类似于 SQL 中的表名

  • 语法::Label

  • 示例:

    (:Person) -- 一个具有 Person 标签的节点 (:Person:Customer) -- 具有多个标签的节点 (p:Person) -- 别名为 p 的 Person 节点

2. 关系类型(Relationship Types)

  • 描述节点间连接的性质

  • 语法::TYPE

  • 示例:

    -[:KNOWS]-> -- 一个 KNOWS 类型的关系 -[:WORKS_FOR]-> -- WORKS_FOR 类型的关系 -[:LIKES {score: 5}]-> -- 带属性的关系

2.2 创建例子

1 中文

创建节点

// 创建师徒节点 CREATE (唐僧:角色 {名称: '唐僧', 类型: '师父', 别名: ['唐三藏', '玄奘'], 特点: '金蝉子转世'}) CREATE (悟空:角色 {名称: '孙悟空', 类型: '徒弟', 别名: ['齐天大圣', '美猴王'], 特点: '石猴出身'}) CREATE (八戒:角色 {名称: '猪八戒', 类型: '徒弟', 别名: ['天蓬元帅'], 特点: '好吃懒做'}) CREATE (沙僧:角色 {名称: '沙僧', 类型: '徒弟', 别名: ['沙和尚', '卷帘大将'], 特点: '忠厚老实'}) CREATE (白龙马:角色 {名称: '白龙马', 类型: '徒弟', 别名: ['小白龙'], 特点: '西海龙王三太子'})

创建关系

// 建立师徒关系 MATCH (唐僧:角色 {名称: '唐僧'}) MATCH (悟空:角色 {名称: '孙悟空'}) MATCH (八戒:角色 {名称: '猪八戒'}) MATCH (沙僧:角色 {名称: '沙僧'}) MATCH (白龙马:角色 {名称: '白龙马'}) // 师徒关系 CREATE (唐僧)-[:师徒关系 {关系: '师父', 开始时间: '贞观十三年'}]->(悟空) CREATE (唐僧)-[:师徒关系 {关系: '师父', 开始时间: '高老庄'}]->(八戒) CREATE (唐僧)-[:师徒关系 {关系: '师父', 开始时间: '流沙河'}]->(沙僧) CREATE (唐僧)-[:师徒关系 {关系: '师父', 开始时间: '鹰愁涧'}]->(白龙马) // 师兄弟关系 CREATE (悟空)-[:师兄弟 {排序: 1, 称谓: '大师兄'}]->(八戒) CREATE (悟空)-[:师兄弟 {排序: 1, 称谓: '大师兄'}]->(沙僧) CREATE (八戒)-[:师兄弟 {排序: 2, 称谓: '二师兄'}]->(沙僧)

查询数据

MATCH (唐僧:角色 {名称: '唐僧'})-[:师徒关系]->(徒弟) RETURN 唐僧.名称 as 师父, COLLECT(徒弟.名称) as 徒弟们

2 英文

创建节点

CREATE (TangSeng:Character {name: '唐僧', type: '师父', alias: ['唐三藏', '玄奘'], traits: '金蝉子转世'}) CREATE (WuKong:Character {name: '孙悟空', type: '徒弟', alias: ['齐天大圣', '美猴王'], traits: '石猴出身'}) CREATE (BaJie:Character {name: '猪八戒', type: '徒弟', alias: ['天蓬元帅'], traits: '好吃懒做'}) CREATE (ShaSeng:Character {name: '沙僧', type: '徒弟', alias: ['沙和尚', '卷帘大将'], traits: '忠厚老实'}) CREATE (BaiLongMa:Character {name: '白龙马', type: '徒弟', alias: ['小白龙'], traits: '西海龙王三太子'})

创建关系

// Create master-disciple relationships MATCH (TangSeng:Character {name: '唐僧'}) MATCH (WuKong:Character {name: '孙悟空'}) MATCH (BaJie:Character {name: '猪八戒'}) MATCH (ShaSeng:Character {name: '沙僧'}) MATCH (BaiLongMa:Character {name: '白龙马'}) // Master-disciple relationships CREATE (TangSeng)-[:MASTER_DISCIPLE {relationship: '师父', startTime: '贞观十三年'}]->(WuKong) CREATE (TangSeng)-[:MASTER_DISCIPLE {relationship: '师父', startTime: '高老庄'}]->(BaJie) CREATE (TangSeng)-[:MASTER_DISCIPLE {relationship: '师父', startTime: '流沙河'}]->(ShaSeng) CREATE (TangSeng)-[:MASTER_DISCIPLE {relationship: '师父', startTime: '鹰愁涧'}]->(BaiLongMa) // Senior-junior relationships among disciples CREATE (WuKong)-[:SENIOR_JUNIOR {ranking: 1, title: '大师兄'}]->(BaJie) CREATE (WuKong)-[:SENIOR_JUNIOR {ranking: 1, title: '大师兄'}]->(ShaSeng) CREATE (BaJie)-[:SENIOR_JUNIOR {ranking: 2, title: '二师兄'}]->(ShaSeng)

查询数据

MATCH (TangSeng:Character {name: '唐僧'})-[:MASTER_DISCIPLE]->(disciple) RETURN TangSeng.name as Master, COLLECT(disciple.name) as Apprentices

2 FalkorDB使用

2.1 Docker安装falkordb系统

docker run -itd \ --name falkordb \ -e REDIS_ARGS="--requirepass falkordb" \ -p 6379:6379 \ -p 3000:3000 \ -v /home/falkordb/data:/var/lib/falkordb/data \ falkordb/falkordb:v4.14.9

2.2 访问页面

配置可视化页面

http://192.168.108.147:3000/

输入密码后就能登录。

2.3 使用代码

安装依赖

pip install FalkorDB -i https://pypi.tuna.tsinghua.edu.cn/simple

Python代码

# -*- coding: utf-8 -*-importtextwrapfromfalkordbimportFalkorDB# 连接FalkorDBdb=FalkorDB(host='192.168.108.147',port=6379,password="falkordb")# 创建一个myrag图g=db.select_graph('myrag')# 创建节点g.query(textwrap.dedent(""" CREATE (TangSeng:Character {name: '唐僧', type: '师父', alias: ['唐三藏', '玄奘'], traits: '金蝉子转世'}) CREATE (WuKong:Character {name: '孙悟空', type: '徒弟', alias: ['齐天大圣', '美猴王'], traits: '石猴出身'}) CREATE (BaJie:Character {name: '猪八戒', type: '徒弟', alias: ['天蓬元帅'], traits: '好吃懒做'}) CREATE (ShaSeng:Character {name: '沙僧', type: '徒弟', alias: ['沙和尚', '卷帘大将'], traits: '忠厚老实'}) CREATE (BaiLongMa:Character {name: '白龙马', type: '徒弟', alias: ['小白龙'], traits: '西海龙王三太子'}) """))# 创建关系g.query(textwrap.dedent(""" // Create master-disciple relationships MATCH (TangSeng:Character {name: '唐僧'}) MATCH (WuKong:Character {name: '孙悟空'}) MATCH (BaJie:Character {name: '猪八戒'}) MATCH (ShaSeng:Character {name: '沙僧'}) MATCH (BaiLongMa:Character {name: '白龙马'}) // Master-disciple relationships CREATE (TangSeng)-[:MASTER_DISCIPLE {relationship: '师父', startTime: '贞观十三年'}]->(WuKong) CREATE (TangSeng)-[:MASTER_DISCIPLE {relationship: '师父', startTime: '高老庄'}]->(BaJie) CREATE (TangSeng)-[:MASTER_DISCIPLE {relationship: '师父', startTime: '流沙河'}]->(ShaSeng) CREATE (TangSeng)-[:MASTER_DISCIPLE {relationship: '师父', startTime: '鹰愁涧'}]->(BaiLongMa) // Senior-junior relationships among disciples CREATE (WuKong)-[:SENIOR_JUNIOR {ranking: 1, title: '大师兄'}]->(BaJie) CREATE (WuKong)-[:SENIOR_JUNIOR {ranking: 1, title: '大师兄'}]->(ShaSeng) CREATE (BaJie)-[:SENIOR_JUNIOR {ranking: 2, title: '二师兄'}]->(ShaSeng) """))# 查询数据res=g.query(textwrap.dedent(""" MATCH (TangSeng:Character {name: '唐僧'})-[:MASTER_DISCIPLE]->(disciple) RETURN TangSeng.name as Master, COLLECT(disciple.name) as Apprentices """))# 打印结果forrowinres.result_set:print(row)print(row[0],row[1])

2.4 访问结果

3 Neo4j使用

3.1 Docker安装Neo4j

账号:neo4j

密码:secretgraph

docker run -itd \ --name neo4j \ -p 7474:7474 \ -p 7687:7687 \ -v /home/neo4j/data:/data \ -v /home/neo4j/logs:/logs \ -v /home/neo4j/plugins:/plugins \ -e NEO4J_AUTH=neo4j/secretgraph \ neo4j:5.26.18

3.2 访问地址

地址信息

http://192.168.108.147:7474/

3.3 使用代码

安装依赖

pip install neo4j

Python代码

fromneo4jimportGraphDatabase,Driver# 参考地址# https://neo4j.com/docs/python-manual/current/transactions/# URI examples: "neo4j://localhost", "neo4j+s://xxx.databases.neo4j.io"URI="neo4j://192.168.108.147"AUTH=("neo4j","secretgraph")""" # 验证连接状态 with GraphDatabase.driver(URI, auth=AUTH) as driver: driver.verify_connectivity() print("建立连接") """driver:Driver=GraphDatabase.driver(URI,auth=AUTH)defadd_data(tx):# 使用参数化查询防止注入,并传入变量[citation:6]query=(""" CREATE (唐僧:角色 {名称: '唐僧', 类型: '师父', 别名: ['唐三藏', '玄奘'], 特点: '金蝉子转世'}) CREATE (悟空:角色 {名称: '孙悟空', 类型: '徒弟', 别名: ['齐天大圣', '美猴王'], 特点: '石猴出身'}) CREATE (八戒:角色 {名称: '猪八戒', 类型: '徒弟', 别名: ['天蓬元帅'], 特点: '好吃懒做'}) CREATE (沙僧:角色 {名称: '沙僧', 类型: '徒弟', 别名: ['沙和尚', '卷帘大将'], 特点: '忠厚老实'}) CREATE (白龙马:角色 {名称: '白龙马', 类型: '徒弟', 别名: ['小白龙'], 特点: '西海龙王三太子'}) MATCH (唐僧:角色 {名称: '唐僧'}) MATCH (悟空:角色 {名称: '孙悟空'}) MATCH (八戒:角色 {名称: '猪八戒'}) MATCH (沙僧:角色 {名称: '沙僧'}) MATCH (白龙马:角色 {名称: '白龙马'}) CREATE (唐僧)-[:师徒关系 {关系: '师父', 开始时间: '贞观十三年'}]->(悟空) CREATE (唐僧)-[:师徒关系 {关系: '师父', 开始时间: '高老庄'}]->(八戒) CREATE (唐僧)-[:师徒关系 {关系: '师父', 开始时间: '流沙河'}]->(沙僧) CREATE (唐僧)-[:师徒关系 {关系: '师父', 开始时间: '鹰愁涧'}]->(白龙马) // 师兄弟关系 CREATE (悟空)-[:师兄弟 {排序: 1, 称谓: '大师兄'}]->(八戒) CREATE (悟空)-[:师兄弟 {排序: 1, 称谓: '大师兄'}]->(沙僧) CREATE (八戒)-[:师兄弟 {排序: 2, 称谓: '二师兄'}]->(沙僧) """)tx.run(query)# 使用默认数据库withdriver.session(database="neo4j")assession:session.execute_write(add_data)defmatch_nodes(tx,name_filter):result=tx.run(""" MATCH (唐僧:角色 {名称: '唐僧'})-[:师徒关系]->(徒弟) RETURN 唐僧.名称 as 师父, COLLECT(徒弟.名称) as 徒弟们 """,filter=name_filter)returnlist(result)# a list of Record objectswithdriver.session(database="neo4j")assession:people=session.execute_read(match_nodes,"Al",)forpersoninpeople:print(person.data())

3.4 访问结果

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/15 9:17:23

GUID为什么不会重复?

GUID为什么不会重复? GUID/UUID &#xff08;全局唯一标识符&#xff09;之所以被认为“几乎不会重复”&#xff0c;是因为其庞大的组合空间和精心设计的生成算法&#xff0c;使得在现实世界中重复的概率低到可以忽略不计。 以下是 GUID 不会重复的核心原因&#xff1a; 1. 庞…

作者头像 李华
网站建设 2025/12/14 22:34:56

E-Hentai批量下载工具:高效管理数字收藏资源的最佳方案

在数字资源日益丰富的今天&#xff0c;如何高效管理和保存有价值的在线内容成为了许多用户的共同痛点。面对心仪的图库资源&#xff0c;传统的手动保存方式不仅效率低下&#xff0c;还容易导致文件混乱。针对这一需求&#xff0c;E-Hentai-Downloader提供了一个简单而强大的解决…

作者头像 李华
网站建设 2025/12/29 5:10:48

布隆过滤器

一、布隆过滤器 1. 什么是布隆过滤器&#xff1f; 布隆过滤器是一种空间效率极高的概率型数据结构&#xff0c;核心作用是快速判断「一个元素是否存在于集合中」。它的特点可以总结为&#xff1a; 说「元素不在」→ 100%准确&#xff08;绝对没在集合里&#xff09;&#xff1b…

作者头像 李华
网站建设 2025/12/14 22:31:59

【JESD22-B109C】倒装芯片拉伸测试

B109C 测试方法&#xff1a;Flip Chip Tensile Pull 倒装芯片拉伸测试1 范围本测试方法适用于芯片与基板焊点形成后、未涂覆底部填充胶或其他会提高表观结合强度的材料前的倒装芯片。其用途包括&#xff1a;评估特定倒装芯片的芯片接合工艺一致性与质量&#xff1b;评估特定倒装…

作者头像 李华
网站建设 2025/12/14 22:31:31

2025年应届生闭坑指南:如何挑选低费用、高认可度的AI技能证书?

随着人工智能技术席卷各行各业&#xff0c;手握相关技能证书已成为应届毕业生提升就业竞争力的重要筹码。然而&#xff0c;面对市场上琳琅满目、价格不一的认证项目&#xff0c;许多同学不禁感到迷茫&#xff1a;如何避开“高价低能”的坑&#xff0c;选择一款既具高含金量又不…

作者头像 李华
网站建设 2026/1/13 8:31:15

基于YOLOv12农作物检测系统1:农作物检测数据集说明(含下载链接)

一. 前言 本篇博客是《基于YOLOv12农作物检测系统》系列文章之《农作物检测数据集说明(含下载链接)》&#xff0c;网上有很多农作物检测数据集的数据&#xff0c;百度一下&#xff0c;一搜一大堆&#xff0c;但质量参差不齐&#xff0c;很多不能用&#xff0c;即使一个一个的看…

作者头像 李华