新增
创建
含义
# study 实体
# 学生 标签
# name 对应字段
create(study:学生{name:"张三"})
create(study:学生{name:"李四"})
create(study:学生{name:"王五"})
create(study:学生{name:"dsy",age:18})
create(city:城市{name:"西安"})
建立关系
match(n:学生{name:"张三"}),(p:城市{name:"西安"}) create (n)-[:出生于] ->(p)
match(n:学生{name:"李四"}),(p:城市{name:"西安"}) create (n)-[:出生于] ->(p)
match (n:学生{name:"张三"}),(n2:学生{name:"李四"}) create (n)-[:兄弟]->(n2)
Set字句
有时,根据我们的客户端要求,我们需要向现有节点或关系添加新属性(字段)。要做到这一点,Neo4j CQL提 供了一个SET子句。
#学生表添加 城市为西安 的字段
match(n:Student{name:"李四"}) set n.city="西安" return n
查询
查询所有节点
match(n) return n
查询指定条件的数据 where子句
match(n) where n.age = 18 return n
查询指定Label(标签)的数据
match(n:`学生`) return n
查询指定字段名称的数据
match(n{name:'张三'}) return n
查询主节点下所关联的对应子节点
#查询出生于西安的所有Person数据
match(n1:province{name:"西安"})<-[:出生于]-(n2:Person) return n2
order by排序
#根据id进行排序,返回id和name字段
match (n:`学生`) return id(n),n.name order by id(n) asc
match (n:`学生`) return id(n),n.name order by id(n) desc
Union子句
#返回结果去重
match(n:`学生`) return n.name as name union match(n:Student) return n.name as name
#返回结果不去重
match(n:`学生`) return n.name as name union all match(n:Student) return n.name as name
Limit和Skip子句
#前两行
match(n:`学生`) return n.name limit 2
#忽略前两行
match(n:`学生`) return n.name skip 2
NUll值
如tom的age,name,sex都为null
#查询年龄为null的数据
match(n:Student) where n.age is null return id(n),n.name,n.age
IN查询
match(n:Student) where n.name in ["tom","李四"] return id(n),n.name,n.age
INDEX索引
创建索引
create index on :Student (name)
删除索引
drop index on:Student (name)
创建唯一索引
create constraint on (n:Student) assert n.name is unique
删除唯一索引
drop constraint on (n:Student) assert n.name is unique
Distinct
match(n:Student) return distinct(n.name)
删除
delete删除
删除标签下所有数据
create(n:班级{name:"一年级"})
create(n:班级{name:"二年级"})
match(n:`班级`) delete n
如果报错如下,说明节点包含关系
删除节点关系
删除完节点关系就可以删除节点了
match(n:`班级`{name:"一年级"})<-[r]-(m) delete r return type(r)
删除节点子句
match(n:`班级`{name:"一年级"}) delete n
remove删除
有时基于客户端要求,我们需要向现有节点或关系添加或删除属性。我们使用Neo4j CQL REMOVE子句来删除节点或关系的现有属性。
#添加多个节点
create (n:Student{name:"张三",age:18,sex:"男"})
create (n:Student{name:"张三",age:18,sex:"男"}),(b:Student{name:"李四",age:14,sex:"女"})
#删除属性(字段)
match(n:Student{name:"张三"}) remove n.age return n
#删除标签(整条数据)
match(n:Student{name:"张三"}) remove n:Student return n
常用函数
字符串函数
功能 |
描述 |
示例 |
UPPER/toUpper |
将所有字母转为大写 |
match(n:Student) return toUpper(n.name) |
LOWER/toLower |
将所有字母转为小写 |
match(n:Student) return tolower(n.name) |
SUBSTRING |
获取指定截取的字符串 |
match(n:Student) return SUBSTRING(n.name,0,1) |
REPLACE |
替换一个字符串(tom改为cs) |
match(n:Student) return replace(n.name,'tom','cs') |
聚合函数
功能 |
描述 |
示例 |
count |
返回行数 |
match(n:Student) return count(n) |
max |
返回最大值 |
match(n:Student) return max(id(n)) |
min |
返回最小值 |
match(n:Student) return min(id(n)) |
sum |
求和 |
match(n:Student) return sum(n.age) |
avg |
平均值 |
match(n:Student) return avg(n.age) |
关系函数
左边为子节点,右边为主节点 比如 Person中的张三出生于province中的西安
功能 |
描述 |
示例 |
startnode |
获取关系的开始节点 |
match(n1:Person)-[r]->(n2:province) return startnode(r) |
endnode |
获取关系的结束节点 |
match(n1:Person)-[r]->(n2:province) return endnode(r) |
id |
获取关系的ID |
match(n1:Person)-[r]->(n2:province) return id(r) |
type |
获取字符串表示中的一个关系的type |
match(n1:Person)-[r]->(n2:province) return type(r) |
算法推荐商品
create(:商品{id:1,name:"阿莫西林",price:12,stockNum:100})
create(:商品{id:2,name:"小儿七星茶颗粒",price:8,stockNum:100})
create(:商品{id:3,name:"益心舒胶囊",price:8.4,stockNum:100})
create(:商品{id:4,name:"红霉素软膏",price:2.3,stockNum:100})
create(:`商品`{id:5,name:"枸杞",price:2.2,stockNum:100})
create(:`商品`{id:6,name:"桑葚",price:2,stockNum:100})
create(:用户{id:101,name:"张三"})
create(:用户{id:102,name:"李四"})
create(:用户{id:103,name:"王五"})
create(:用户{id:104,name:"TOM"})
create(:用户{id:105,name:"jerry"})
match(n1:`用户`{id:101}),(n2:`商品`{id:1}) create(n1)-[:购买]->(n2)
match(n1:`用户`{id:101}),(n2:`商品`{id:2}) create(n1)-[:购买]->(n2)
match(n1:`用户`{id:101}),(n2:`商品`{id:3}) create(n1)-[:购买]->(n2)
match(n1:`用户`{id:101}),(n2:`商品`{id:4}) create(n1)-[:购买]->(n2)
match(n1:`用户`{id:102}),(n2:`商品`{id:1}) create(n1)-[:购买]->(n2)
match(n1:`用户`{id:102}),(n2:`商品`{id:4}) create(n1)-[:购买]->(n2)
match(n1:`用户`{id:102}),(n2:`商品`{id:5}) create(n1)-[:购买]->(n2)
match(n1:`用户`{id:102}),(n2:`商品`{id:6}) create(n1)-[:购买]->(n2)
match(n1:`用户`{id:103}),(n2:`商品`{id:2}) create(n1)-[:购买]->(n2)
match(n1:`用户`{id:103}),(n2:`商品`{id:3}) create(n1)-[:购买]->(n2)
match(n1:`用户`{id:104}),(n2:`商品`{id:1}) create(n1)-[:购买]->(n2)
match(n1:`用户`{id:104}),(n2:`商品`{id:3}) create(n1)-[:购买]->(n2)
在这个例子中,我们使用协同过滤算法来实现基于用户的商品推荐。具体地,我们找到与目标用户有共同购买行为的其他用户,并返回这些用户最喜欢的、目标用户尚未购买的商品。
可以使用以下 Cypher 查询语句来实现协同过滤算法:
这个查询语句会找到与目标用户 ID 为 101 的用户有共同购买行为的其他用户,并返回他们购买过的、目标用户尚未购买的商品。结果按照共同购买用户数量降序排列,并只返回前 3 个推荐商品。
MATCH (u:`用户` {id: 101})-[:购买]->(p:`商品`)<-[:购买]-(ou:`用户`)-[:购买]->(rec:`商品`)
WHERE NOT EXISTS((u)-[:购买]->(rec))
WITH rec, COUNT(DISTINCT ou) AS similarity
ORDER BY similarity DESC
LIMIT 3
RETURN rec.name, similarity
实现推荐查询:
○ 使用 Cypher 查询语句,根据目标用户 ID 查找该用户已购买的商品。
○ 基于协同过滤算法,使用以上的查询语句查找与目标用户具有相关性的其他商品。文章来源:https://www.toymoban.com/news/detail-813230.html
○ 返回推荐结果。文章来源地址https://www.toymoban.com/news/detail-813230.html
到了这里,关于Neo4J CQL语句的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!