当前位置: 首页 > article >正文

【neo4j】neo4j和Cypher 查询语言相关知识点

【neo4j】neo4j和Cypher 查询语言相关知识点

1.什么是neo4j

Neo4j 是一个广泛使用的图形数据库管理系统(Graph Database Management System)。它是一种NoSQL数据库,专为存储和查询图形数据而设计。Neo4j 支持图形数据模型,允许用户以节点(Nodes)和关系(Relationships)的形式存储数据,并通过属性(Properties)来丰富这些节点和关系。

1.1.Neo4j 的主要特点

  1. 图形数据模型
    • 节点(Nodes):表示实体,如人、地点、事件等。
    • 关系(Relationships):表示节点之间的连接,如“朋友关系”、“工作关系”等。
    • 属性(Properties):节点和关系可以携带键值对形式的数据,如姓名、年龄等。
  2. Cypher 查询语言
    • Cypher 是一种声明式查询语言,专门用于图形数据库。它使用户能够以直观的方式编写复杂的查询,从而在图形中查找和操作数据。
    • Cypher 提供了强大的语法来表达图形模式匹配,支持路径查找、过滤、聚合等操作。
  3. 高性能
    • Neo4j 采用内存优先的存储引擎,能够在内存中缓存数据,以实现高速查询响应。
    • 它还支持分布式部署,可以在多个节点之间水平扩展。
  4. ACID 事务
    • Neo4j 支持原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)的事务特性,确保数据的一致性和可靠性。
  5. 生态系统和工具
    • Neo4j 拥有丰富的工具集和生态系统,包括图形界面工具(如Neo4j Browser)、可视化工具、API客户端库等。
    • 它还支持多种编程语言的驱动程序,便于在不同环境中使用。
  6. 社区和商业支持
    • Neo4j 拥有一个活跃的社区,提供了大量的文档、教程和示例。
    • 除了开源版本外,Neo4j 还提供企业版,包含更多的功能和支持服务。

1.2.Neo4j 的应用场景

  1. 社交网络
    • 社交网络中的用户关系、好友推荐等。
    • 例如,LinkedIn 使用 Neo4j 来优化其招聘服务。
  2. 推荐系统
    • 电商网站的商品推荐、个性化广告等。
    • 例如,Netflix 使用图形数据库来改进其推荐算法。
  3. 网络安全
    • 网络攻击检测、恶意软件分析等。
    • 通过分析网络拓扑和行为模式来识别潜在的安全威胁。
  4. 知识图谱
    • 构建知识图谱,如企业内部的知识管理系统。
    • 例如,维基百科使用图形数据库来构建和查询其知识图谱。
  5. 金融风控
    • 信贷风险评估、欺诈检测等。
    • 通过分析客户之间的复杂关系来发现潜在的风险点。
  6. 生物医学研究
    • 生物网络分析、药物研发等。
    • 例如,基因互作网络、蛋白质相互作用等。

2.安装neo4j

下载地址:下载地址在这里

安装完成后别忘了配置环境变量

3.启动并登录neo4j

启动neo4j

neo4j console

然后访问 http://localhost:7474/

然后进行登录,默认用户名和密码都是neo4j

当看到这个界面就表示登录成功了

在这里插入图片描述

4.Cypher 查询语言

neo4j中包含节点、关系、属性

所以Cypher 查询语言要做的就是对这些进行CRUD

创建节点

创建一个节点的基本语法如下:

CREATE (label:Label {property: 'value'})

这里的 label 是节点的标签(Label),property 是节点的属性(Property),value 是属性的值。

创建关系

创建关系的基本语法如下:

CREATE (node1:Label1)-[:RELATIONSHIP_TYPE {property: 'value'}]->(node2:Label2)

这里的 node1node2 是两个节点,RELATIONSHIP_TYPE 是关系的类型(Type),property 是关系的属性,value 是属性的值。

基本查询

查询单个节点

如果你想查询一个特定的节点,可以使用以下语句:

MATCH (n:Label) WHERE n.property = 'value'
RETURN n

这里 n 是一个带有 Label 标签的节点,property 是该节点的一个属性,其值为 'value'

查询关系

如果你想查询一个特定的关系,可以使用以下语句:

MATCH ()-[r:RELATIONSHIP_TYPE]->()
WHERE r.property = 'value'
RETURN r

这将返回所有类型为 RELATIONSHIP_TYPE 的关系,其中关系 r 的属性 property 的值为 'value'

复杂查询

查询带有属性的节点

假设你想查询所有名字为 AlicePerson 节点:

MATCH (person:Person) WHERE person.name = 'Alice'
RETURN person
查询节点之间的关系

假设你想查询 AliceBob 之间的所有关系:

MATCH (alice:Person {name: 'Alice'})-[r]->(bob:Person {name: 'Bob'})
RETURN r
查询路径

假设你想查询 AliceCharlie 的所有可能路径:

MATCH p=(alice:Person {name: 'Alice'})-[*]->(charlie:Person {name: 'Charlie'})
RETURN p

这里 [ * ] 表示任意长度的路径。

查询最短路径

假设你想查询 AliceCharlie 的最短路径:

MATCH p=shortestPath((alice:Person {name: 'Alice'})-[*]->(charlie:Person {name: 'Charlie'}))
RETURN p
模糊查询

假设你想查询 Alice 通过 KNOWS 关系到达 Bob 的所有长度为 2 到 5 的路径:

MATCH (alice:Person {name: 'Alice'})-[r:KNOWS*2..5]-(bob:Person {name: 'Bob'})
RETURN r

分组与聚合

假设你想统计每个年龄段的人数:

MATCH (person:Person)
RETURN person.age, count(*) AS numberOfPeopleOfSameAge
ORDER BY numberOfPeopleOfSameAge DESC

综合示例

假设我们有一个简单的图形数据库,其中包含几个人及其关系,我们将查询这些人及其关系:

// 查询所有的 Person 节点
MATCH (person:Person)
RETURN person

// 查询所有 KNOWS 关系
MATCH ()-[r:KNOWS]->()
RETURN r

// 查询 Alice 和 Bob 之间的关系
MATCH (alice:Person {name: 'Alice'})-[r]->(bob:Person {name: 'Bob'})
RETURN r

// 查询 Alice 到 Charlie 的所有路径
MATCH p=(alice:Person {name: 'Alice'})-[*]->(charlie:Person {name: 'Charlie'})
RETURN p

// 查询 Alice 到 Charlie 的最短路径
MATCH p=shortestPath((alice:Person {name: 'Alice'})-[*]->(charlie:Person {name: 'Charlie'}))
RETURN p

// 统计每个年龄段的人数
MATCH (person:Person)
RETURN person.age, count(*) AS numberOfPeopleOfSameAge
ORDER BY numberOfPeopleOfSameAge DESC

http://www.kler.cn/a/311343.html

相关文章:

  • 俏美韵从心出发,与女性一道为健康生活贡献力量
  • 2024年11月13日
  • 第74期 | GPTSecurity周报
  • 【go从零单排】Timer、Epoch 时间函数
  • 解决 Redis 报错:`(error) NOAUTH Authentication required`
  • 【2024最新】基于springboot+vue的闲一品交易平台lw+ppt
  • 【Python】 报错Can‘t find model ‘en_core_web_md‘
  • jmeter吞吐量控制器
  • 大数据新视界 --大数据大厂之SaaS模式下的大数据应用:创新与变革
  • 前端框架对比和选择
  • MiniCPM3-4B | 笔记本电脑运行端侧大模型OpenBMB/MiniCPM3-4B-GPTQ-Int4量化版 | PyCharm环境
  • Redis---卸载Redis
  • Basler 相机与LabVIEW进行集成
  • linux 自动清除日志 脚本
  • 828华为云征文 | 深度评测,华为云Flexus X实例在Sysbench性能测试中的亮眼表现
  • shell常用命令
  • Python开发深度学习常见安装包 error 解决
  • Redis 配置
  • AI绘画与摄影新纪元:ChatGPT+Midjourney+文心一格 共绘梦幻世界
  • CSP-J 算法基础 快速排序
  • 初写MySQL四张表:(3/4)
  • 八股文-JVM
  • 黑马程序员Java笔记整理(day01)
  • 用idea编写并运行第一个spark scala处理程序
  • RK3568平台(网络篇)MAC地址烧录
  • 工业仪器仪表指针数据集