neo4j语法

图数据库在社交网络、实时推荐、征信系统、人工智能等领域有广泛应用。

集群特征:主从复制,重选主服务器和容错;每个实例都有自己的本地缓冲

性能优势:查询内不跨网络;实时操作,具有快速和一致的响应时间;缓冲分区,对于非常大的图,跨集群扩展缓冲。

1. 安装

安装现在是zip文件,解压后要配置环境变量,管理员运行cmd后执行:neo4j install-service,管理员运行cmd后执行:neo4j start,就可以进入浏览器7474界面。

可以修改config,修改里面内存大小dbms.memory.heap.initial_size=1024m

dbms.memory.heap.initial_size=1024m

如果想实现远程访问,首先关闭Windows防火墙,在config中修改监听地址为 0.0.0.0。

# To accept non-local connections, uncomment this line:

dbms.connectors.default_listen_address=0.0.0.0

2. 基本概念

标签Label: 相当于数据表,比如Person

节点Node: 每个标签下可以有N个节点Node,每个节点代表一个对象,相当于数据表里的一行。

关系Relation: 几点之间的连线代表对象之间的关系。

节点和关系都可以带若干属性。

3. cypher语法

①创建节点

Create (erzi:Person {id:‘erzi‘}),(baba:Person{id:‘baba‘}),//erzi别名

(yeye:Person{id:‘yeye‘, name:‘zhangsan‘}),

(nainai:Person{id:‘nainai‘}),(mama:Person{id:‘mama‘}),

(bozi:Person{id:‘hozi‘}),

(erzi)-[:father]->(baba), (baba)-[:father]->(yeye),

(baba)-[:mother]->(nainai), (erzi)-[:mother]->(mama),

(erzi)-[:girlFriend]->(bozi)

②Match查找

Match (n:Person {id:’erzi’}) Return n limit 25

或者Match (n:Person) where n.id=’erzi’  Return n limit 25

Match (n:Person) where n.id=’erzi’  Return n.name, n.id limit 25

③Merge 创建或者查询(已经存在)

//如何给已经存在的节点添加新关系,并删除旧关系

Match  (n:Person {id:’erzi’}) , (f:Person {id:’bozi’})

Merge (n)-[r:fuqi]->(f) delete r

Merge (n)-[r:FUQI]->(f)

Return n, f

④更新Set

Cypher无Update,用set代替

//更新属性

Match (n:Person{id:’baba’}) set n.name=’张三’, n.age=60  return n

⑤delete和remove

删之前最好先return 害怕一不小心删错了

Delete操作用于删除节点和关联关系

Remove 操作用于删除标签和属性

这两个命令都应该与MATCH命令一起使用

Match (n:Person{id:’baba’}) remove n.age return n

Match p=()-[r:teach]->() delete p //把所有teach的关系都删除

Match (a:Person), (b:Person) where a.id=’erzi’ and b.id=’bozi’

Merge (a)-[r:FUQI]->b

Delete r

Match (s:Teacher)-[r:teach] ->(d:Student) delete r,s,d //把关系和节点都删掉

Match (n:Test) remove n:Test//删除label

Match (n{name:’Andre’}) DETACH DELTET n

⑥order by

Match (n:Person) Return n order by n.id,n.name desc skip 2 LIMIT 25

⑦Union和Union all

Union:把多段Match的return结果拼成一个结果集。会自动去重

Union all:作用同Union

Match (n:Person) where n.age >30 Return n.id, n.age order by n.id,n.age union all Match (n:Person) where n.id=’erzi’ and n.age is not null return n.id, n.age

Where 属性 is null

is not null

⑧in

Match (n:Person) where n.id in [‘erzi’,’bozi’,’baba’] and n.age is not null return n.id, n.age

⑨内置id

每个relation都有个系统分配的id,从0开始递增,全局唯一。一般不会用内置的。通过函数id(node/relation)可以获取id

用户可以自定义id属性,与内置id无关。

Relation具有方向性,create节点之间关系时,必须指定方向,否则会报错,但是查询时,可以不指定,不指定他就会把双向的方向查出来。

Match(n:Person)-[:FUQI]-(s:Person) Return distinct n,s

⑩索引index

Create index on: Person(id);

Drop index on: Person(id);

不需要给索引起名称,只需要设置索引字段即可

给哪些字段建索引呢?根据查询需要,把查询多的字段建索引。

⑾属性唯一性约束

Create constrain on (a:Person) ASSERT a.id IS UNIQUE

Drop constrain on (a:Person) ASSERT a.id IS UNIQUE

⑿where

找到charlie和martin的最短路径,并且关系里面不存在father类型的关系。

MATCH (charlie:Person { name: ‘Charlie Sheen‘ }),(martin:Person { name: ‘Martin Sheen‘ }),

p =shortestPath((charlie)-[*]-(martin))

WHERE NONE (r IN relationships(p) WHERE type(r)= ‘FATHER‘)

RETURN p

⑿常用函数shortestPath、allShortestPaths

Upper\lower\substring\replace

count\max\min\sum\avg 返回由Match命令返回的所有行的平均值等。。

neo4j无group by

Match (n:Person) return avg(n.age) ///只包含age不为空的节点

Match (n:Person) return Substring(n.id,1,3), n.id

Match p=shortestPath((n:Person{id=’mama’})-[*..3]-(b:Person{id=’nainai})) return p

Match p=allshortestPaths((n:Person{id=’mama’})-[*..3]-(b:Person{id=’nainai})) return p

关系链路越短,代表这两个节点的关系越密切。

⒀with

Match (user)-[:friend]-(friend)

Where user.name=$name

With user, count(friend) As friends

Where friends>10

Return user

4. 本地csv文件导入

把你的数据放在import文件夹。

LOAD CSV WITH HEADERS FROM "file:///高管节点.csv" AS row

CREATE (:高管{ggname:row.ggname,gs:row.gs,url:row.url,phone:row.phone,email:row.email,address:row.address})

LOAD CSV WITH HEADERS FROM "file:///资金.csv" AS row merge (n1:企业{名字:row.source}) with * merge (n2:企业{名字:row.target}) with * create (n1)-[i:借款]->(n2) set r.shaftWidth=row.weight

#海量数据加载

create constraint on (p:F_CERT) assert p.CASE_ID is unique; call apoc.periodic.iterate( "call apoc.load.jdbc(‘jdbc:oracle:thin:{username}/{password}@{hostip}:{port}:{servicename or sid}‘,\"select case_id,proportion from invest where start_type=‘2‘ and end_type=‘2‘\")",

"merge (n1:F_CERT{CASE_ID:row.START_ID}) with * merge (n2:F_CERT{CASE_ID:row.END_ID}) with * create (n1)-[i:INVEST]->(n2) set i+=row",

{batchSize:100,iterateList:true})

注意事项:

1、节点里“主键”应建索引,唯一“主键”应建“约束”;2、merge时()中只出现“主键”,其余属性用set字句设定。

4. 踩过的坑

①报错:CSV import : Cannot merge node using null property value

数据里面出现了空值,去掉空值即可

②本来想批量导入关系,发现不行,必须分不同的关系分别导入

原文地址:https://www.cnblogs.com/fionacai/p/9029995.html

时间: 2024-10-15 21:12:30

neo4j语法的相关文章

Neo4j的查询语法笔记(二)

cypher是neo4j官网提供的声明式查询语言,非常强大,用它可以完成任意的图谱里面的查询过滤,我们知识图谱的一期项目 基本开发完毕,后面会陆续总结学习一下neo4j相关的知识.今天接着上篇文章来看下neo4j的cpyher查询的一些基本概念和语法. 一,Node语法 在cypher里面通过用一对小括号()表示一个节点,它在cypher里面查询形式如下: 1,() 代表匹配任意一个节点 2, (node1) 代表匹配任意一个节点,并给它起了一个别名 3, (:Lable) 代表查询一个类型的数

Neo4j基本用法

Cypher提供了一个方便的方法去表示查询和其他的neo4j行为,Cypher不仅可以完成工作,也可以在产品中有足够快的速度.也可以 基于java语言来处理查询用例,使用java API可以自定义遍历方法. Cypher语言进行查询的步骤为:语法分析和验证查询,生成执行方案,定位初始节点,选择和遍历关系,改变或者返回结果.在图数据库中进行强力搜索是非常消耗时间的,最好有一初始节点,或者有相应的索引. 在图数据库中,有联系的节点以及联系所组成的模式(pattern)是最有价值的东西,提供了最多的信

NoSQL 数据库概览及其与 SQL 语法的比较

NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用的难题. 本文对NoSQL数据库的定义.分类.特征.当前比较流行的NoSQL数据库系统等进行了简单的介绍,并对NoSQL和SQL语法进行了简单的比较,为大家对NoSQL数据库的学习提供了有益的参考. 一.NoSQL的出现 关系型数据库系统多年来在解决数据存储.服务和处理问题方面取得了巨大的成功.一些大型的公司使用关系型数据库建立了自己的系统,如联机事务处理系统和后端分析应用系统.联机事务处理(OLTP)系统用

图形数据库Neo4J简介

最近我在用图形数据库来完成对一个初创项目的支持.在使用过程中觉得这种图形数据库实际上挺有意思的.因此在这里给大家做一个简单的介绍. NoSQL数据库相信大家都听说过.它们常常可以用来处理传统的关系型数据库所难以解决的一系列问题.通常情况下,这些NoSQL数据库分为Graph,Document,Column Family以及Key-Value Store等四种.这四种类型的数据库分别使用了不同的数据结构来记录数据.因此它们所适用的场景也不尽相同. 其中最为特别的便是图形数据库了.可以说,它和其它的

开源软件:NoSql数据库 - 图数据库 Neo4j

转载自原文地址:http://www.cnblogs.com/loveis715/p/5277051.html 最近我在用图形数据库来完成对一个初创项目的支持.在使用过程中觉得这种图形数据库实际上挺有意思的.因此在这里给大家做一个简单的介绍. NoSQL数据库相信大家都听说过.它们常常可以用来处理传统的关系型数据库所难以解决的一系列问题.通常情况下,这些NoSQL数据库分为Graph,Document,Column Family以及Key-Value Store等四种.这四种类型的数据库分别使用

NoSQL数据库概览及其与SQL语法的比较

[文章摘要] HBase是一个高可靠性.高性能.面向列.可伸缩的分布式存储系统,同时也是知名的NoSQL数据库之一.NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用的难题. 本文对NoSQL数据库的定义.分类.特征.当前比较流行的NoSQL数据库系统等进行了简单的介绍,并对NoSQL和SQL语法进行了简单的比较,为大家对NoSQL数据库的学习提供了有益的参考. 一.NoSQL的出现 关系型数据库系统多年来在解决数据存储.服务和处理问题方面取得了巨大的成功.

Cypher语法

cypher是neo4j官网提供的声明式查询语言,非常强大,用它可以完成任意的图谱里面的查询过滤,我们知识图谱的一期项目 基本开发完毕,后面会陆续总结学习一下neo4j相关的知识.今天接着上篇文章来看下neo4j的cpyher查询的一些基本概念和语法. 一,Node语法 在cypher里面通过用一对小括号()表示一个节点,它在cypher里面查询形式如下: 1,() 代表匹配任意一个节点 2, (node1) 代表匹配任意一个节点,并给它起了一个别名 3, (:Lable) 代表查询一个类型的数

关于neo4j初入门(2)

DELETE删除 删除节点及相关节点和关系. DELETE <node-name-list> DELETE <node1-name>,<node2-name>,<relationship-name> 使用逗号(,)运算符来分隔节点名称和关系名称. MATCH (cc:CreditCard)-[r]-(c:Customer)RETURN r          检查是否存在 MATCH (cc: CreditCard)-[rel]-(c:Customer) DE

Neo4j视频教程 Neo4j 图数据库视频教程

课程发布地址 地址: 腾讯课堂<Neo4j 图数据库视频教程> https://ke.qq.com/course/327374?tuin=442d3e14 作者 庞国明,<Neo4j权威指南>副主编.<Neo4j 3.x 入门经典>翻译 邮箱:[email protected] QQ:1143815700 Neo4j技术讨论QQ群:547190638 Neo4j中文社区:http://neo4j.com.cn 面向人群 Neo4j初学者:已掌握一定Neo4j技术的开发人