新增
創(chuàng)建
含義
# 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字句
有時,根據(jù)我們的客戶端要求,我們需要向現(xiàn)有節(jié)點或關系添加新屬性(字段)。要做到這一點,Neo4j CQL提 供了一個SET子句。
#學生表添加 城市為西安 的字段
match(n:Student{name:"李四"}) set n.city="西安" return n
查詢
查詢所有節(jié)點
match(n) return n
查詢指定條件的數(shù)據(jù) where子句
match(n) where n.age = 18 return n
查詢指定Label(標簽)的數(shù)據(jù)
match(n:`學生`) return n
查詢指定字段名稱的數(shù)據(jù)
match(n{name:'張三'}) return n
查詢主節(jié)點下所關聯(lián)的對應子節(jié)點
#查詢出生于西安的所有Person數(shù)據(jù)
match(n1:province{name:"西安"})<-[:出生于]-(n2:Person) return n2
order by排序
#根據(jù)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的數(shù)據(jù)
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索引
創(chuàng)建索引
create index on :Student (name)
刪除索引
drop index on:Student (name)
創(chuàng)建唯一索引
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刪除
刪除標簽下所有數(shù)據(jù)
create(n:班級{name:"一年級"})
create(n:班級{name:"二年級"})
match(n:`班級`) delete n
如果報錯如下,說明節(jié)點包含關系
刪除節(jié)點關系
刪除完節(jié)點關系就可以刪除節(jié)點了
match(n:`班級`{name:"一年級"})<-[r]-(m) delete r return type(r)
刪除節(jié)點子句
match(n:`班級`{name:"一年級"}) delete n
remove刪除
有時基于客戶端要求,我們需要向現(xiàn)有節(jié)點或關系添加或刪除屬性。我們使用Neo4j CQL REMOVE子句來刪除節(jié)點或關系的現(xiàn)有屬性。
#添加多個節(jié)點
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
#刪除標簽(整條數(shù)據(jù))
match(n:Student{name:"張三"}) remove n:Student return n
常用函數(shù)
字符串函數(shù)
功能 |
描述 |
示例 |
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') |
聚合函數(shù)
功能 |
描述 |
示例 |
count |
返回行數(shù) |
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) |
關系函數(shù)
左邊為子節(jié)點,右邊為主節(jié)點 比如 Person中的張三出生于province中的西安
功能 |
描述 |
示例 |
startnode |
獲取關系的開始節(jié)點 |
match(n1:Person)-[r]->(n2:province) return startnode(r) |
endnode |
獲取關系的結束節(jié)點 |
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)
在這個例子中,我們使用協(xié)同過濾算法來實現(xiàn)基于用戶的商品推薦。具體地,我們找到與目標用戶有共同購買行為的其他用戶,并返回這些用戶最喜歡的、目標用戶尚未購買的商品。
可以使用以下 Cypher 查詢語句來實現(xiàn)協(xié)同過濾算法:
這個查詢語句會找到與目標用戶 ID 為 101 的用戶有共同購買行為的其他用戶,并返回他們購買過的、目標用戶尚未購買的商品。結果按照共同購買用戶數(shù)量降序排列,并只返回前 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
實現(xiàn)推薦查詢:
○ 使用 Cypher 查詢語句,根據(jù)目標用戶 ID 查找該用戶已購買的商品。
○ 基于協(xié)同過濾算法,使用以上的查詢語句查找與目標用戶具有相關性的其他商品。文章來源:http://www.zghlxwxcb.cn/news/detail-813230.html
○ 返回推薦結果。文章來源地址http://www.zghlxwxcb.cn/news/detail-813230.html
到了這里,關于Neo4J CQL語句的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!