在構建知識圖譜的時候,Neo4j用來建立實體之間的關系非常方便,下面簡單介紹一下它的使用方法:
Neo4j數據庫可以使用以下幾個概念存儲任何種類的數據。
1,節點-圖形數據記錄
2,關系-連接節點
3,屬性-指定的數據值
Neo4j將數據存儲在Graph中,并將記錄成為節點
最簡單的圖只有一個名為屬性名為值的單個節點。我們先來繪制一下朋友的社交圖。
1,首先為節點繪制一個圓
2,添加名字為Email
3,這個人來自瑞典
節點是數據,數據是屬性,屬性是鍵值對,如下圖。
標簽,關聯一組節點
節點可以通過每個成員的標簽組合在一起,在我們的社交圖中,我們將標記代表Person的每個節點。
1,將標簽Person應用到我們為Emil創建的節點
2,Person節點顏色呈紅色
一個節點可以有零個或多個標簽,標簽沒有任何屬性,如下圖。
更多節點,一般可以混合使用通用屬性
像任何數據庫一樣,在Neo4j中存儲數據可以像添加更多記錄一樣簡單,我們將添加更多的節點。
類似的節點可以有不同的屬性,屬性可以是字符串,數字或布爾值,Neo4j可以存儲數十億個節點。如下圖。
關系-連接圖中的節點
Neo4j的厲害之處在于連接數據。要關聯任何兩個節點,請添加描述節點如何關聯的關系。
在我們的社交圖表中,我們只說誰知道誰:
1,Emil知道Johan和lan。
2,Johan知道Lan和Rik。
3,Rik和Lan知道Allison。
關系總有方向性的,關系總是有一種類型,關系形成數據模式,如下圖。
關系屬性-存儲由兩個節點共享的信息
在屬性圖中,關系也可以包含屬性的數據記錄,仔細查看Emil的關系,請注意:
自2001年以來,Emil一直認識Johan,Emil和Ian的分為5(滿分為5),其他人都可以擁有類似的關系屬性,如下圖。
屬性圖包含節點和關系,兩者都有屬性。
我們使用Cypher生成一個小型社交圖,Cypher是Neo4j對應的查詢語言,安裝好Neo4j,從瀏覽器進入到(默認)localhost:7474,登陸(賬號密碼默認為neo4j,成功后還需設置新密碼)然后在上方使用Cypher,如下圖。
CREATE (ee:Person { name: "Emil", from: "Sweden", klout: 99 })
CREATE子句用來創建數據
()括號來表示一個節點
ee為新節點添加一個變量并標注Person
{}來向節點添加屬性
查找節點
現在找到代表Emil的節點
MATCH (ee:Person) WHERE ee.name = "Emil" RETURN ee;
MATCH子句來指定節點和關系的模式
(ee:Person)具有標簽'Person'的單個節點模式,其將匹配變量'ee'
WHERE子句限制結果
ee.name =“Emil”將名稱屬性與值“Emil”進行比較
RETURN子句用于請求特定結果
創建更多的節點和關系
MATCH (ee:Person) WHERE ee.name = "Emil"
CREATE (js:Person { name: "Johan", from: "Sweden", learn: "surfing" }),
(ir:Person { name: "Ian", from: "England", title: "author" }),
(rvb:Person { name: "Rik", from: "Belgium", pet: "Orval" }),
(ally:Person { name: "Allison", from: "California", hobby: "surfing" }),
(ee)-[:KNOWS {since: 2001}]->(js),(ee)-[:KNOWS {rating: 5}]->(ir),
(js)-[:KNOWS]->(ir),(js)-[:KNOWS]->(rvb),
(ir)-[:KNOWS]->(js),(ir)-[:KNOWS]->(ally),
(rvb)-[:KNOWS]->(ally)
CREATE可以一次創造很多節點和關系
匹配-描述要在圖表中找到的內容
例如,一個模式可以找到Emil的朋友
MATCH (ee:Person)-[:KNOWS]-(friends) WHERE ee.name = "Emil" RETURN ee, friends
MATCH描述從已知節點找到發現節點的模式
(ee)用Person啟動模式(由WHERE限定)
- [:KNOWS] -匹配”KNOWS”關系(在任一方向)
(friends)將被綁定到Emil的朋友
推薦-使用模式
模式匹配可以用來提出建議,Johan正在學習沖浪,所以,他可能想找一個已經做過的新朋友。
MATCH (js:Person)-[:KNOWS]-()-[:KNOWS]-(surfer) WHERE js.name = "Johan" AND surfer.hobby = "surfing" RETURN DISTINCT surfer
()空圓括號忽略這些節點
DISTINCT,因為多于一個路徑將匹配該模式
沖浪者將包含Allison,他是朋友的朋友
分析-使用視覺查詢計劃
通過預先提交EXPLAIN或PROFILE來了解您的查詢是如何工作的
PROFILE MATCH (js:Person)-[:KNOWS]-()-[:KNOWS]-(surfer)
WHERE js.name = "Johan" AND surfer.hobby = "surfing" RETURN DISTINCT surfer
Live Cypher警告-實時識別查詢問題
在您鍵入時,查詢編輯器會通知您有關不推薦使用的功能和潛在的特殊查詢。
以上是我為大家簡單介紹的Neo4j數據庫。
安利一個特別熱心的編程樂園群:624108656