Neo4j使用


一、刪除圖

 在開發過程中,很多時候需要快(簡)速(單)清(粗)除(暴)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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM