【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

bash 复制代码
neo4j console

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

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

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

4.Cypher 查询语言

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

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

创建节点

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

CQL 复制代码
CREATE (label:Label {property: 'value'})

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

创建关系

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

CQL 复制代码
CREATE (node1:Label1)-[:RELATIONSHIP_TYPE {property: 'value'}]->(node2:Label2)

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

基本查询

查询单个节点

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

CQL 复制代码
MATCH (n:Label) WHERE n.property = 'value'
RETURN n

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

查询关系

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

CQL 复制代码
MATCH ()-[r:RELATIONSHIP_TYPE]->()
WHERE r.property = 'value'
RETURN r

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

复杂查询

查询带有属性的节点

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

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

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

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

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

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

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

查询最短路径

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

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

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

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

分组与聚合

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

CQL 复制代码
MATCH (person:Person)
RETURN person.age, count(*) AS numberOfPeopleOfSameAge
ORDER BY numberOfPeopleOfSameAge DESC

综合示例

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

CQL 复制代码
// 查询所有的 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
相关推荐
欧阳秦穆2 天前
Neo4j desktop 2.0.1版本如何安装apoc、gds等插件
neo4j
路溪非溪2 天前
Tensorflow的安装记录
人工智能·tensorflow·neo4j
一屉大大大花卷2 天前
初识Neo4j之图数据库(二)
数据库·neo4j
一屉大大大花卷4 天前
初识Neo4j之入门介绍(一)
数据库·neo4j
AustinCyy6 天前
【环境配置】Neo4j Community Windows 安装教程
windows·neo4j
萧鼎6 天前
深度探索 Py2neo:用 Python 玩转图数据库 Neo4j
数据库·python·neo4j
背太阳的牧羊人6 天前
Cypher 是 Neo4j 专用的查询语言
neo4j
lishaoan776 天前
使用tensorflow的线性回归的例子(九)
tensorflow·线性回归·neo4j
背太阳的牧羊人6 天前
Neo4j 的向量搜索(Neo4jVector)和常见的向量数据库(比如 Milvus、Qdrant)之间的区别与联系
数据库·neo4j·milvus
隆里卡那唔7 天前
在dify中通过http请求neo4j时为什么需要将localhost变为host.docker.internal
http·docker·neo4j