安裝
- bin 目錄:用於存儲 Neo4j 的可執行程序;
- conf 目錄:用於控制 Neo4j 啓動的配置文件;
- data 目錄:用於存儲核心數據庫文件;
- plugins 目錄:用於存儲 Neo4j 的插件。
cmd切換目錄至安裝路徑
安裝命令
bin\neo4j install-service
啓動服務、停止服務、重啓服務和查詢服務的狀態
bin\neo4j start
bin\neo4j stop
bin\neo4j restart
bin\neo4j status
Neo4j 的配置文檔存儲在 conf 目錄下,Neo4j 通過配置文件 neo4j.conf 控制服務器的工作。默認情況下,不需要進行任意配置,就可以啓動服務器。
Neo4j 服務器具有一個集成的瀏覽器,在一個運行的服務器實例上訪問: http://localhost:7474/,打開瀏覽器,顯示啓動頁面
默認的 Host 是 bolt://localhost:7687
,默認的用戶是 neo4j,其默認的密碼是 neo4j,第一次成功登錄到 Neo4j 服務器之後,需要重置密碼。訪問 Graph Database 需要輸入身份驗證,Host 是 Bolt 協議標識的主機。
登錄界面
在 Neo4j 瀏覽器中創建節點和關係
使用 Cypher 命令,在瀏覽器中通過 Neo4j 創建兩個節點和兩個關係。
在 $
命令行中,編寫 Cypher 腳本代碼,點擊 Play 按鈕完成創建
CREATE (n:Person { name: 'Andres', title: 'Developer' }) return n;
作用是創建一個 Person,幷包含屬性名字和職稱。
下面這條語句也創建了一個 Person 對象,屬性中只是名字和職稱不一樣。
CREATE (n:Person { name: 'Vic', title: 'Developer' }) return n;
通過下面兩行命令進行兩個 Person 的關係匹配
match(n:Person{name:"Vic"}),(m:Person{name:"Andres"}) create (n)-[r:Friend]->(m) return r;
match(n:Person{name:"Andres"}),(m:Person{name:"Vic"}) create (n)-[r:Friend]->(m) return r;
在創建完兩個節點和關係之後,查看數據庫中的圖形:
Py2neo 庫完成對 Neo4j 的操作
安裝 Py2neo
pip install py2neo
圖關係構建
from py2neo.data import Node, Relationship
a = Node("Person", name="Alice")
b = Node("Person", name="Bob")
ab = Relationship(a, "KNOWS", b)
首先引入 Node 和 Relationship 對象,緊接着,創建 a 和 b 節點對象,最後一行匹配 a 和 b 之間的工作僱傭關係
通過 print 打印出 ab 的內容
print(ab)
用 Neo4j 構建一個簡單的農業知識圖譜
基於 Neo4j 來創建知識圖譜的過程:
- 環境準備
- 語料準備
- 語料加載
- 知識圖譜查詢展示
語料是已經處理好的數據,包含6個 csv 文件,文件內容和描述如下。
- attributes.csv:文件大小 2M,內容是通過互動百科頁面得到的部分實體的屬性,包含字段:Entity、AttributeName、Attribute,分別表示實體、屬性名稱、屬性值。文件前5行結構如下:
Entity,AttributeName,Attribute
密度板,別名,纖維板
葡萄蔓枯病,主要爲害部位,枝蔓
坎德拉,性別,男
坎德拉,國籍,法國
坎德拉,場上位置,後衛
hudong_pedia.csv
:文件大小 94.6M,內容是已經爬好的農業實體的百科頁面的結構化數據,包含字段:title、url、image、openTypeList、detail、baseInfoKeyList、baseInfoValueList,分別表示名稱、百科 URL 地址、圖片、分類類型、詳情、關鍵字、依據來源。文件前2行結構如下:
"title","url","image","openTypeList","detail","baseInfoKeyList","baseInfoValueList"
"菊糖","http://www.baike.com/wiki/菊糖","http://a0.att.hudong.com/72/85/20200000013920144736851207227_s.jpg","健康科學##分子生物學##化學品##有機物##科學##自然科學##藥品##藥學名詞##藥物中文名稱列表","[藥理作用] 診斷試劑 人體內不含菊糖,靜注後,不被機體分解、結合、利用和破壞,經腎小球濾過,通過測定血中和尿中的菊糖含量,可以準確計算腎小球的濾過率。菊糖廣泛存在於植物組織中,約有3.6萬種植物中含有菊糖,尤其是菊芋、菊苣塊根中含有豐富的菊糖[6,8]。菊芋(Jerusalem artichoke)又名洋姜,多年生草本植物,在我國栽種廣泛,其適應性廣、耐貧瘠、產量高、易種植,一般畝產菊芋塊莖爲2 000~4 000 kg,菊芋塊莖除水分外,還含有15%~20%的菊糖,是加工生產菊糖及其製品的良好原料。","中文名:","菊糖"
"密度板","http://www.baike.com/wiki/密度板","http://a0.att.hudong.com/64/31/20200000013920144728317993941_s.jpg","居家##巧克力包裝##應用科學##建築材料##珠寶盒##禮品盒##科學##糖果盒##紅酒盒##裝修##裝飾材料##隔斷##首飾盒","密度板(英文:Medium Density Fiberboard (MDF))也稱纖維板,是以木質纖維或其他植物纖維爲原料,施加脲醛樹脂或其他適用的膠粘劑製成的人造板材。按其密度的不同,分爲高密度板、中密度板、低密度板。密度板由於質軟耐衝擊,也容易再加工,在國外是製作傢俬的一種良好材料,但由於國家關於高密度板的標準比國際標準低數倍,所以,密度板在中國的使用質量還有待提高。","中文名:##全稱:##別名:##主要材料:##分類:##優點:","密度板##中密度板纖維板##纖維板##以木質纖維或其他植物纖維##高密度板、中密度板、低密度板##表面光滑平整、材質細密性能穩定"
-
hudong_pedia2.csv
:文件大小 41M,內容結構和hudong_pedia.csv
文件保持一致,只是增加數據量,作爲hudong_pedia.csv
數據的補充。 -
new_node.csv
:文件大小 2.28M,內容是節點名稱和標籤,包含字段:title、lable,分別表示節點名稱、標籤,文件前5行結構如下:
title,lable
藥物治療,newNode
膳食纖維,newNode
Boven Merwede,newNode
亞美尼亞蘇維埃百科全書,newNode
wikidata_relation.csv
:文件大小 1.83M,內容是實體和關係,包含字段 HudongItem1、relation、HudongItem2,分別表示實體1、關係、實體2,文件前5行結構如下:
HudongItem1,relation,HudongItem2
菊糖,instance of,化合物
菊糖,instance of,多糖
瓦爾,instance of,河流
菊糖,subclass of,食物
瓦爾,origin of the watercourse,萊茵河
wikidata_relation2.csv
:大小 7.18M,內容結構和wikidata_relation.csv
一致,作爲wikidata_relation.csv
數據的補充。
語料加載
將csv文件放入 D:\neo4j-community-3.5.12\import 路徑下
利用 Neo4j 的 LOAD CSV WITH HEADERS FROM...
功能進行加載
// 將hudong_pedia.csv 導入
LOAD CSV WITH HEADERS FROM "file:///hudong_pedia.csv" AS line
CREATE (p:HudongItem{title:line.title,image:line.image,detail:line.detail,url:line.url,openTypeList:line.openTypeList,baseInfoKeyList:line.baseInfoKeyList,baseInfoValueList:line.baseInfoValueList})
將 hudong_pedia.csv
和 hudong_pedia2.csv
導入 Neo4j 作爲結點,然後對 titile 屬性添加 UNIQUE(唯一約束/索引)。
// 新增了hudong_pedia2.csv
LOAD CSV WITH HEADERS FROM "file:///hudong_pedia2.csv" AS line
CREATE (p:HudongItem{title:line.title,image:line.image,detail:line.detail,url:line.url,openTypeList:line.openTypeList,baseInfoKeyList:line.baseInfoKeyList,baseInfoValueList:line.baseInfoValueList})
// 創建索引
CREATE CONSTRAINT ON (c:HudongItem)
ASSERT c.title IS UNIQUE
error
Neo.ClientError.Statement.SyntaxError: Invalid input 'N': expected 'p/P' (line 6, column 20 (offset: 316))
"ASSERT c.title IS UNIQUE"
Neo.ClientError.Statement.SyntaxError: Invalid input 'N': expected 'p/P' (line 6, column 20 (offset: 316)) "ASSERT c.title IS UNIQUE" ^
z