Cypher

参考:https://www.galaxybase.com/document?file=v3.4.1%2Fstandalone-doc&docid=15

以下默认:n为点;r为边;p为路径

基础

字符规则

  1. 关键字:大小写敏感
  2. 名称:由 [字母,数组,_] 组成;以字母开头;大小写敏感

基础元素

  1. 点:有且只有一个类型,可以有多个 属性和标签
  2. 边:有且只有一个类型,可以有多个 属性,没有标签
  3. 属性:KV键值对
  4. 标签:

表示:点 边 模式 路径

这里讲的是 在MATCH中的
进行限制或绑定到变量,绑定到变量 可用于后续计算
若要在后续使用,直接 用变量名 即可

(n:Man {name:'hahaha',age:20})

  • r:命名
  • :Man:类型
  • {name:‘hahaha’,age:20}):键值对
(n)
(:Man)
({name:'hahaha',age:20})
(n:Man {name:'hahaha',age:20})

-[r::BELONG {year:'2000'} ]-

  • r:命名
  • :BELONG :类型
  • {year:‘2000’}:键值对
# 最基础表示,不绑定名字,[不考虑方向,右点指向左点,指向右点]
--
<--
-->

# 加`[]`,里面不放东西,加了等于没加
-[]-

# 给这条边命名,方便后续使用
-[r]-

# 给这条边加上一些限制m,[类型,属性,类型+属性]
-[:BELONG]- 
-[ {year:'2000'} ]-
-[:BELONG  {year:'2000'} ]-

# 支持两种类型
-[:BELONG|MANAGE]- 

# 同时 命名+限制(类型+属性)
-[r::BELONG  {year:'2000'} ]-

可变长边

可限制 最小长度与最大长度,不限制最大长度时 很危险

-[*1..3]-
-[:BELONG *1..3]-
-[:BELONG *1..]-
-[:BELONG *..3]-
-[:BELONG *..]-

模式

  1. 由边将点连接起来的
  2. 总是以 点 开始和结束
  3. 方向并不要求一致
  4. 根据模式查到 路径
(n)
(n)-[r]->(n)
(n)-[r]->(n)-[r]->(n)
(n)-[r]->(n)<-[r]-(n)

语句结构

  1. 为下面的理解做作铺垫
  2. 向MYSQL一样,MATCH查到一条数据就增加一行;其他预计按照上一行的数据逐行处理,聚合函数 和 UNION 除外
  3. 这条语句执行完成,生成完整的一张表格后,传到下一行(这意味着 不能 既传一张表,又传一个变量)

查询 MATCH等基础语句

[OPTIONAL] MATCH [p=]路径
WHERE 筛选条件
WITH 变量1,变量2
ORDER BY 变量1,变量2
SKIP 4
LIMIT 6
RETURN p

MERGE

UNION [ALL]
  1. MATCH:普配路径
  2. WHERE:进行过滤,简单的删选条件可以放在匹配规则
  3. WITH:限制传入的变量(放弃一部分变量)
  4. ORDER BY:排序,前一个相等了,再用后一个
  5. SKIP:跳过前几个,上面的是跳过4个
  6. LIMIT:取前面几个,上面的是取前面6个
  7. RETURN:返回
  8. UNION:拼接表,要求以下相同 [列数,列名];会进行去重
  9. MERGE:类似于MATCH,查不到时会CREATE

OPTIONAL MATCH:对未匹配到的位置,填入null
p=路径匹配规则:把获取到的路径放到p中
SKIP LIMIT配合使用:选择第5-10个
UNION ALL:不进行去重,直接拼接

修改图结构

创建 CREATE

CREATE 

删除 DELETE

DELETE n

DELETE r

DETACH DELETE 

修改属性值 SET

SET r.name='hahaha'

删除属性和标签 REMOVE

REMOVE n.name

REMOVE n:Man

REMOVE n:Man:Chinese

加载CSV

LOAD CSV FROM 'https://www.chuanglintech.com/public/company.csv' AS line 

查看执行计划

  • EXPLAIN:粗略
  • PROFILE:精确

其他

CALL … YIELD …
UNWIND
EXIST
IS NULL
IS NOT NULL

UNIQUE
INDEX
STARTS WITH
ENDS WITH
CONTAINS
DISTINCT
AS
OR
AND
NOT
USING [INDEX [SEEK] | SCAN ] variable:Label(property)
FOREACH <设值操作>
ALLOWREPEAT DIRECTED

CREATE INDEX ON :label(key…)
DROP INDEX ON :label(key…)

函数

allShortestPaths()
id()

Neo4j/存储接口

apoc函数

apoc.custom.declareProcedure

GDS

官方文档:https://neo4j.com/docs/graph-data-science/current/

非算法

函数 作用 链接
gds.graph.list 列出所有映射;
这不是一个快照,原图新增了符合的节点,在使用的时候也会出现
https://neo4j.com/docs/graph-data-science/current/graph-list/
gds.graph.project 创建 映射(临时图,用完需手动删除) https://neo4j.com/docs/graph-data-science/current/graph-project/
gds.util.asNode 从ID转换为node
gds.graph.drop 删除映射 https://neo4j.com/docs/graph-data-science/current/graph-drop/

并不是都有CALL调用

# gds.graph.list
CALL gds.graph.list()

# gds.graph.project
CALL gds.graph.project('friends','person','friend')

# gds.util.asNode:
CALL gds.pageRank.stream('friends')
YIELD nodeId
WITH gds.util.asNode(nodeId) AS n
RETURN n

^等价
CALL gds.pageRank.stream('friends')
YIELD nodeId
RETURN gds.util.asNode(nodeId) AS n

# gds.graph.drop
CALL gds.graph.drop('friends')

算法

使用方式

CALL gds.labelPropagation.stats(xx)
CALL gds.labelPropagation.write(xx)
CALL gds.labelPropagation.mutate(xx)
CALL gds.labelPropagation.stream(xx)

算法 执行模式 execution mode

https://neo4j.com/docs/graph-data-science/current/common-usage/running-algos/
https://neo4j.com/docs/graph-data-science/current/algorithms/syntax/

四种

  • stream
  • stats
  • mutate
  • write

你可能感兴趣的:(服务器,数据库)