一、刪除圖

 在開發過程中,很多時候需要快(簡)速(單)清(粗)除(暴)Neo4j中存在的海量資料節點和關係資料

 在這種情況下,delete和detach從效能上都已力不從心。Neo4j官方推薦清庫方法,即刪除graph.db資料庫檔案,暴力清空資料庫

 1. 關閉Neo4j伺服器程序

  檢查伺服器程序是否啟動,如啟動,可通過kill -9或其它方式殺掉伺服器程序

 2. 刪除graph.db資料庫檔案

  找到<NEO4J_HOME>/data/databases/路徑(即安裝路徑和設定的系統環境變數),可以看到graph.db資料夾。刪除此資料夾即可

 3. 重新啟動Neo4j伺服器

  通過bin目錄下執行如下命令啟動Neo4j

./neo4j console

  

二、linux下無瀏覽器如何重置密碼

 初次登入neo4j需要重置密碼,但是無圖形化介面,如何重置?

 1)修改conf/neo4j.conf

# Enable a remote shell server which Neo4j Shell clients can log in to.
dbms.shell.enabled=true
# The network interface IP the shell will listen on (use 0.0.0.0 for all interfaces).
dbms.shell.host=127.0.0.1
# The port the shell will listen on, default is 1337.
dbms.shell.port=1337

  本地操作的話只要將註釋標記刪除就可以,需要遠端操作則需要修改host

 2)重啟neo4j

./neo4j start

 3)執行./neo4j-shell密令,輸入使用者名稱、密碼(預設使用者名稱密碼均為neo4j)

  輸入命令CALL dbms.changePassword('你的新密碼');  輸入命令退出:exit;

 注意:當然有圖形化介面的話,修改密碼就很方便:

:server change-password

 三、py2neo使用

 圖模型:

 我們也可以使用Python連線Neo4j,我們使用pip安裝py2neo之後,使用如下:

 1)連線資料庫

from py2neo import Graph

g = Graph(
host="localhost", # neo4j 搭載伺服器的ip地址,ifconfig可獲取到
http_port=7474, # neo4j 伺服器監聽的埠號
user="neo4j", # 資料庫user name,如果沒有更改過,應該是neo4j
password="root") # neo4j資料庫第一次登入時需要設定新得密碼,我設定為root

  建立了連線,我們就可以使用g來操作資料庫

 2)節點得建立

  在圖資料庫裡組成部分其實很簡單,節點(Node)、節點的屬性(value)、關係(Relation),這也是圖資料庫最大的特點,舉個簡單的例子

  Alice與Bob為朋友關係,Alice為20歲,Bob為25歲,這裡Alice和Bob就是節點,關係為朋友,節點屬性就是其對應的年齡,簡化成三元組表示為(節點,關係,節點),不過需要注意的是在建立關係前我們需要先建立獨立節點

from py2neo import Graph
from py2neo import Node g = Graph(
host="localhost", # neo4j 搭載伺服器的ip地址,ifconfig可獲取到
http_port=7474, # neo4j 伺服器監聽的埠號
user="neo4j", # 資料庫user name,如果沒有更改過,應該是neo4j
password="root") # neo4j資料庫第一次登入時需要設定新得密碼,我設定為root # 建立節點
node0 = Node('Person' , name = 'Alice')
node1 = Node('Person' , name = 'Bob') node0['age'] = 20
node1['age'] = 25 # 利用之前得連線,進行資料庫操作
g.create(node0)
g.create(node1)

  前面我已經建立了連線:g,這裡Person表示label,在圖資料庫中我們需要label來表示節點,在後面的圖資料庫搜尋當中就是依靠這個label來進行搜尋的,因此這個label需要好好表示

  後面的name其實已經表示這個節點的屬性(從上面的圖可以看出,節點的屬性可以有多個),這裡再舉一個例子,一本圖書叫《飄》,那麼建立節點

node = Node('Book' , name = 'Gone with the wind')

g.create(node)
# 由於節點屬性為圖書,因此這裡label設定為Book。
# 回到上面的Alice與Bob,age這個表示節點的屬性,與name同樣表示為節點的屬性

 3)關係的建立

  假設我們已經建立的兩種label,如Disease和Check,其中每種標籤下面有很多Node,如label Disease下面有個Node叫心血管疾病,label Check下面有個Node叫載脂蛋白A1/載脂蛋白B比值

  我們知道心血管疾病需要做這樣的檢查:載脂蛋白A1/載脂蛋白B比值,所以就希望這兩個標籤下的該兩個Node需要建立關係:

  在neo4j命令視窗可以如下操作:

match(p:Disease),(q:Check) where p.name='心血管疾病'and q.name='載脂蛋白A1/載脂蛋白B比值' create (p)-[rel:need_check{name:'診斷檢查'}]->(q)

  而利用Py2neo的話,操作如下:

start_node = 'Disease'
end_node = 'Check'
p = '心血管疾病'
q = '載脂蛋白A1/載脂蛋白B比'
rel_type = 'need_check'
rel_name = '診斷檢查' query = "match(p:%s),(q:%s) where p.name='%s'and q.name='%s' create (p)-[rel:%s{name:'%s'}]->(q)" % (start_node, end_node, p, q, rel_type, rel_name) g.run(query) # query即為:
# match(p:Disease),(q:Check) where p.name='心血管疾病'and q.name='載脂蛋白A1/載脂蛋白B比值' create (p)-[rel:need_check{name:'診斷檢查'}]->(q)

  我們可以這樣理解Label和Node,Label更像是類,而Node更像是類的實列化,即該類的一個物件

 4)查詢節點

sql = ["MATCH (m:Disease) where m.name = '{0}' return m.name, m.cause".format(i) for i in entities]

# 在neo4j命令視窗可以如下執行:
# MATCH (m:Disease) where m.name = '糖尿病' return m.name, m.cause
# 這裡假設已經提前建立了Label為Disease的很多疾病實體了
# 關係語句:MATCH (m:Disease)-[r:do_eat]->(n:Food) where m.name = '發燒' return m.name, r.name, n.name