說明
因?yàn)槲乙矂偨佑|知識(shí)圖譜,就是小白,本篇博客相當(dāng)于一些入門級(jí)的Cypher語(yǔ)句的舉例,然后具體說明一下NEO4J?Desktop導(dǎo)入CSV文件是怎么實(shí)現(xiàn)的,以及他的一些基本操作,適合剛接觸的小伙伴。如果大家對(duì)于NEO4J的配置有疑問的話可以參考文章NEO4J桌面版的配置和連接Pycharm_neo4j 桌面版-CSDN博客
基本使用方法
1.清空數(shù)據(jù),刪除之前已有的節(jié)點(diǎn)、關(guān)系和屬性等。
match (n) detach delete n
2.展示知識(shí)圖譜中所有的節(jié)點(diǎn)、關(guān)系和屬性等。
match(n) return n
3.創(chuàng)建
創(chuàng)建節(jié)點(diǎn)
創(chuàng)建沒有屬性的節(jié)點(diǎn)
創(chuàng)建一個(gè)節(jié)點(diǎn),其標(biāo)簽為學(xué)生,沒有屬性。
create (n:學(xué)生)
創(chuàng)建包含屬性的節(jié)點(diǎn)
n代表節(jié)點(diǎn)名 學(xué)生是節(jié)點(diǎn)的標(biāo)簽(label)名 姓名、年齡、性別都是屬性名 ,
標(biāo)簽名和屬性名不用引號(hào)修飾,但是屬性值如果是字符串需要加引號(hào)
create (n:學(xué)生 {姓名:'周杰倫',年齡:40,性別:'男'})
創(chuàng)建多標(biāo)簽的節(jié)點(diǎn)
創(chuàng)建一個(gè)既是學(xué)生又是父親的節(jié)點(diǎn)
CREATE (n:學(xué)生:父親)
我們也可以為周杰倫參加上一個(gè)歌手的節(jié)點(diǎn)標(biāo)簽
MATCH(學(xué)生 {姓名:'周杰倫'}) set 學(xué)生:歌手
創(chuàng)建關(guān)系
創(chuàng)建新關(guān)系
CREATE (n:埠渝)-[r:LIKES]->(m:周杰倫)
RETURN r
如下圖所示,會(huì)創(chuàng)建出兩個(gè)新的節(jié)點(diǎn) ,一個(gè)新的關(guān)系,即新節(jié)點(diǎn)+新關(guān)系+無屬性關(guān)系
創(chuàng)建有屬性的關(guān)系
CREATE (n:學(xué)生{姓名:"李四"})-[relation:LIKES{程度:"十分喜愛"}]->(m:老師{姓名:"唐老師"})
下圖可以看到,我們新建了一條帶屬性的關(guān)系邊。
為現(xiàn)有的節(jié)點(diǎn)添加關(guān)系
MATCH (n:學(xué)生 {姓名:'埠渝'}), (m:歌手 {姓名:'周杰倫'})
CREATE (n)-[r:likes]->(m)
RETURN n, r, m;
當(dāng)然也可以增加一定的限制條件,比如說ID。這里的id要注意是自己電腦上的。
MATCH (n:學(xué)生 ), (m:歌手)
where id(m)=11 and id(n)=12
CREATE (n)-[r:DIS]->(m)
RETURN n, r, m;
4.查詢
查找節(jié)點(diǎn)相關(guān)信息
查找節(jié)點(diǎn)
其中這個(gè)學(xué)生是我們要查詢的節(jié)點(diǎn)的標(biāo)簽(label),where里的事節(jié)點(diǎn)的屬性,可以用來篩選節(jié)點(diǎn)標(biāo)簽是學(xué)生中,我們要去查詢的是哪一個(gè)。
match (n:學(xué)生) where n.姓名='埠渝' return n
查詢節(jié)點(diǎn)的標(biāo)簽
也就是說像前面所說的,我們?yōu)橹芙軅悇?chuàng)建了兩個(gè)節(jié)點(diǎn)標(biāo)簽學(xué)生和歌手,意思就是把周杰倫這個(gè)節(jié)點(diǎn)對(duì)應(yīng)的所有標(biāo)簽都查詢出來。
MATCH (a:學(xué)生) where a.姓名='周杰倫' RETURN labels(a)
查詢節(jié)點(diǎn)的屬性值
MATCH (a:學(xué)生) where a.姓名='埠渝' RETURN properties(a)
查詢節(jié)點(diǎn)的屬性鍵
MATCH (a:學(xué)生) where a.姓名='埠渝' RETURN keys(a)
這里我們可以和上邊的圖對(duì)應(yīng)一下,就很容易理解是什么意思了。
查找與當(dāng)前節(jié)點(diǎn)有關(guān)系的的節(jié)點(diǎn)
查找李四所有有關(guān)系的老師的姓名
MATCH (n:學(xué)生 { 姓名 : '李四' })-->(m:老師)
RETURN m.姓名
查找李四所有喜歡的老師的姓名
MATCH (n:學(xué)生 { 姓名 : '李四' })-[r:LIKES]->(m:老師)
RETURN m.姓名
查找關(guān)系
查詢節(jié)點(diǎn)間的關(guān)系
查詢埠渝和周杰倫間的關(guān)系類型
match(a) where a.姓名='埠渝' match(b) where b.姓名='周杰倫' match p=(a)-[r]->(b) return type(r)
查詢關(guān)系的所有屬性
查詢李四和唐老師之間的關(guān)系的所有屬性
查詢節(jié)點(diǎn)間關(guān)系的屬性鍵
match(a)?where?a.姓名='李四'?match(b)?where?b.姓名='唐老師'?match?p=(a)-[r]->(b)?return?keys(r)
5.刪除
刪除節(jié)點(diǎn)的所有相關(guān)關(guān)系
注意這里是沒有箭頭的
MATCH (n:學(xué)生{姓名:'埠渝'})-[r]-()
DELETE r
刪除節(jié)點(diǎn)的所有外向關(guān)系
這里就是有剪頭的了
MATCH ()-[r]->(n:老師{姓名:'唐老師'})
DELETE r
刪除某個(gè)檢點(diǎn)的某類關(guān)系
MATCH (n:學(xué)生{姓名:'埠渝'})-[r:LIKES]-()
DELETE r
刪除實(shí)體的屬性
MATCH (n:學(xué)生{姓名:'埠渝'})
REMOVE n.性別
刪除所有節(jié)點(diǎn)和關(guān)系
MATCH (n)
OPTIONAL MATCH (n)-[r]-()
DELETE n,r
6.修改
修改節(jié)點(diǎn)屬性
create(n:學(xué)生{姓名:'埠渝',年齡:23})
MATCH (n:學(xué)生{姓名:'埠渝'})
SET n.姓名='王哥'
修改節(jié)點(diǎn)標(biāo)簽
MATCH (n:學(xué)生{姓名:'王哥'})
REMOVE n:學(xué)生
SET n:青年
修改關(guān)系的類型
MATCH (n:學(xué)生)-[r:LIKES]-(m:歌手)
WHERE n.姓名='埠渝' and m.姓名='周杰倫'
CREATE (n)-[r2:HATES]->(m)
DELETE r
NEO4J?Desktop導(dǎo)入CSV文件
數(shù)據(jù)準(zhǔn)備
將數(shù)據(jù)另存為下邊的這個(gè)文件格式。
放入NEO4J中
這里像這樣點(diǎn)擊找到這個(gè)import ,會(huì)打開這個(gè)文件夾,這時(shí)候我們把上邊的CSV文件保存到文件夾里就可以了。
代碼
打開Neo4j Browser,輸入下列代碼
load csv with headers from "file:///PersonD.csv" as PersonD return PersonD
輸出結(jié)果如下方所示,得到文件對(duì)應(yīng)的結(jié)構(gòu)化信息
創(chuàng)建節(jié)點(diǎn)
通過下列代碼可以將文件里的人都抽出來創(chuàng)建節(jié)點(diǎn),節(jié)點(diǎn)的標(biāo)簽為人,節(jié)點(diǎn)有一個(gè)屬性姓名
load csv with headers from "file:///PersonD.csv" as PersonD
merge?(A:人{(lán)姓名:PersonD.人})
return?count(A)
當(dāng)然,我們不用上邊的代碼,用下邊的代碼就可以把文件里所有的屬性都給節(jié)點(diǎn)帶上了。
load csv with headers from "file:///PersonD.csv" as PersonD
merge?(A:人{(lán)姓名:PersonD.人,三種人:PersonD.三種人,黨員:PersonD.黨員,身份證號(hào):PersonD.身份證號(hào)碼,年齡:PersonD.年齡})
return?count(A)
依據(jù)CSV數(shù)據(jù)創(chuàng)建關(guān)系
準(zhǔn)備數(shù)據(jù)
保存在上述所說的import文件夾里。
創(chuàng)建節(jié)點(diǎn)
分別輸入下列兩段代碼,創(chuàng)建節(jié)點(diǎn)
load?csv?with?headers?from?"file:///PersonD1.csv"?as?PersonD1
merge?(f:公民{公民:PersonD1.公民})
return?count(f)
load?csv?with?headers?from?"file:///PersonD1.csv"?as?PersonD1
merge?(B:身份{身份:PersonD1.身份})
return?count(B)
結(jié)果如下圖所示。
建立關(guān)系
輸入下列代碼,可以將身份和公民之間建立關(guān)系。
load?csv?with?headers?from?"file:///PersonD1.csv"?as?PersonD1
MATCH?(f:公民{公民:PersonD1.公民})
MATCH?(B:身份{身份:PersonD1.身份})
MERGE?(f)-[r:身份是]->(B)
效果圖,如下。
Create和Merge的區(qū)別
Create:
-
CREATE
用于創(chuàng)建節(jié)點(diǎn)、關(guān)系或者屬性,如果給定的模式已經(jīng)存在,CREATE
會(huì)強(qiáng)制性地創(chuàng)建新的節(jié)點(diǎn)、關(guān)系或?qū)傩裕词瓜嗤哪J揭呀?jīng)存在于數(shù)據(jù)庫(kù)中。 - 它總是創(chuàng)建新的模式,不管之前是否存在相同的模式。
Merge:
-
MERGE
也用于創(chuàng)建節(jié)點(diǎn)、關(guān)系或者屬性,但它會(huì)首先嘗試在數(shù)據(jù)庫(kù)中查找給定的模式。如果找到了匹配的模式,則不會(huì)創(chuàng)建新的,而是將現(xiàn)有的模式返回。 - 如果沒有找到匹配的模式,則會(huì)創(chuàng)建新的模式。
總的來說:
CREATE
總是創(chuàng)建新的模式,而 MERGE
會(huì)先查找是否已經(jīng)存在相同的模式,存在則返回,不存在則創(chuàng)建。在需要確保模式的唯一性時(shí),MERGE
是一個(gè)很有用的工具,可以避免重復(fù)創(chuàng)建相同的節(jié)點(diǎn)、關(guān)系或?qū)傩浴?/p>
報(bào)錯(cuò)
如果出現(xiàn)這個(gè)報(bào)錯(cuò),他的原因就是你的表格里的數(shù)據(jù)他不同列的個(gè)數(shù)不一樣,比如說第一列20個(gè),第二列19個(gè),這樣的話,你去讀第一列(最長(zhǎng)的這列)時(shí)不會(huì)出錯(cuò),但是去讀第二列的時(shí)候就會(huì)出錯(cuò),就是因?yàn)槟懔斜砝锏臄?shù)據(jù)不一樣長(zhǎng)。文章來源:http://www.zghlxwxcb.cn/news/detail-819358.html
Neo.ClientError.Statement.SemanticError Cannot merge the following node because of null property value for?文章來源地址http://www.zghlxwxcb.cn/news/detail-819358.html
歡迎大家有問題在評(píng)論區(qū)打出來,或者博客有什么問題,歡迎指正。
到了這里,關(guān)于NEO4J的基本使用以及桌面版NEO4J Desktop導(dǎo)入CSV文件的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!