# neo4j **Repository Path**: naclnezn/neo4j ## Basic Information - **Project Name**: neo4j - **Description**: neo4j图数据库 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-09-06 - **Last Updated**: 2024-09-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # neo4j ## 介绍 随着社交、电商、金融、零售、物联网等行业的快速发展,现实社会织起了了一张庞大而复杂的关系网,传统数据库很难处理关系运算。 大数据行业需要处理的数据之间的关系随数据量呈几何级数增长,急需一种支持海量复杂数据关系运算的数据库,图数据库应运而生。 世界上很多著名的公司都在使用图数据库,比如:社交领域:Facebook, Twitter,Linkedin用它来管理社交关系,实现好友推荐 ## 安装 ```shell docker pull neo4j:4.4.37-community ``` ```shell mkdir -p /home/docker/neo4j/{data,logs,conf,import,db-backup} ``` ```shell docker run -itd \ --name neo4j \ --restart always \ -p 7474:7474 \ -p 7474:7687 \ -v /home/data/neo4j/data:/data \ -v /home/data/neo4j/logs:/logs \ -v /home/data/neo4j/conf:/var/lib/neo4j/conf \ -v /home/data/neo4j/import:/var/lib/neo4j/import \ -v /etc/localtime:/etc/localtime \ -e NEO4J_server_backup_enabled=true \ -e NEO4J_AUTH=neo4j/root@123 neo4j:4.4.37-community # 注:社区版不支持热备,企业版支持热备和冷备。社区版要热备,只能进行逻辑备份 # NEO4J_ACCEPT_LICENSE_AGREEMENT: 启用热备 # 用户名:neo4j # 密码:root@123 ``` ## CQL ### 添加 ```shell CREATE (:) ``` 在CREATE语句中,包含两个基础元素,节点名称node-name和标签名称lable-name。 标签名称相当于关系型数据库中的表名,而节点名称则代指这一条数据。 以下面的CREATE语句为例,就相当于在Person这张表中创建一条没有属性的空数据。 ```shell CREATE (索尔:Person) ``` 而创建包含属性的节点时,可以在标签名称后面追加一个描绘属性的json字符串: ```shell CREATE (洛基:Person {name:"洛基",title:"诡计之神"}) ``` ### 查询节点 在创建完节点后,我们就可以使用MATCH匹配命令查询已存在的节点及属性的数据,命令的格式如下: ```shell MATCH (:) ``` 通常,MATCH命令在后面配合RETURN、DELETE等命令使用,执行具体的返回或删除等操作。 执行下面的命令: ```shell MATCH (p:Person) RETURN p ``` ### 删除节点 接下来,我们删除之前创建的不包含属性的无用节点,上面提到过,需要使用MATCH配合DELETE进行删除。 ```shell MATCH (p:Person) WHERE id(p)=100 DELETE p ``` 在这条删除语句中,额外使用了WHERE过滤条件,它与SQL中的WHERE非常相似,命令中通过节点的id进行了过滤。 删除完成后,再次执行查询操作,可以看到只保留了洛基这一个节点 ### 添加关联 在neo4j图数据库中,遵循属性图模型来存储和管理数据,也就是说我们可以维护节点之间的关系。 在上面,我们创建过一个节点,所以还需要再创建一个节点作为关系的两端: ```shell CREATE (p:Person {name:"索尔",title:"雷神"}) ``` 创建关系的基本语法如下: ```shell CREATE (:) - [:] -> (:) ``` 当然,也可以利用已经存在的节点创建关系,下面我们借助MATCH先进行查询,再将结果进行关联,创建两个节点之间的关联关系: ```shell MATCH (m:Person),(n:Person) WHERE m.name='索尔' and n.name='洛基' CREATE (m)-[r:BROTHER {relation:"无血缘兄弟"}]->(n) RETURN r ``` 添加完成后,可以通过关系查询符合条件的节点及关系: ```shell MATCH (m:Person)-[re:BROTHER]->(n:Person) RETURN m,re,n ``` ## 运行 ```shell http://127.0.0.1:8080/parse?sentence=海拉又被称为死亡女神 http://127.0.0.1:8080/parse?sentence=死亡女神捏碎了雷神之锤 http://127.0.0.1:8080/parse?sentence=雷神之锤属于索尔 ``` 在浏览器里查询192.168.0.234:7474 ``` MATCH (p:Person) RETURN p ```