紅聯Linux門戶
Linux幫助

Neo4j和圖數據庫起步

發布時間:2017-12-20 09:59:15來源:linux.cn作者:linux人
在本系列的 第一篇 中,我們介紹了圖數據庫中的一些核心概念。在這篇,我們將安裝 Neo4j 并通過網頁客戶端在圖中插入并查詢數據。
第一篇Neo4j圖數據庫基礎地址:http://www.4179693.live/linux/32146.html
可通過 他們的網站(https://neo4j.com/download/community-edition/) 下載社區版的 Neo4j!你可以下載 Windows 或 OSX 版來測試,也有各 Linux 發行版對應的版本,還有 Docker 版。
 
我會在 Debian 9 (stretch) 上安裝軟件。如果你正在使用 Debian 8 (jessie) 或更老的版本,你可以安裝當前的版本,但會出現的一點小問題是 jessie 中并沒有安裝 Neo4j 運行所需要的 Java 8 環境。
wget -O - https://debian.neo4j.org/neotechnology.gpg.key | sudo apt-key add - echo 'deb https://debian.neo4j.org/repo stable/' | sudo tee /etc/apt/sources.list.d/neo4j.list sudo apt-get update sudo apt-get install neo4j
 
在我的系統中,出于某些原因,我創建好 /var/run/neo4j 之后它就可以很輕松地開始了。Neo4j 給了一個“最大打開文件數”的警告,但因為是測試環境所以我不太需要關心這個問題。Neo4j 默認只會監聽本機 localhost 上的連接。如果你的機器是 Debian ,那這很好,但是我的不是。我修改了 /etc/neo4j/neo4j.conf ,取消注釋了下面這行:
dbms.connectors.default_listen_address=0.0.0.0
 
在重啟 Neo4j 之后,我可以通過 7474 端口來訪問服務器的 Neo4j 服務。默認的用戶名和密碼是 Neo4j 和 neo4j; 你需要設置一個新密碼,然后會出現初始頁面:
Neo4j和圖數據庫起步
 
讓我們在 Neo4j 上創建上篇文章中使用過的圖。如下圖:
Neo4j和圖數據庫起步
 
類似 MySQL 和其它的數據庫系統,Neo4j 的各類操作也使用一套查詢語句。Cypher,就是 Neo4j 使用的查詢語句,但有一些語法區別需要去學習和注意。節點需要用圓括號表示,而關系 需要放在方括號中。因為這是系統中唯二的數據類型,所以了解這些就夠了。
 
首先,我們創建所有的節點。你需要將下面內容復制黏貼到瀏覽器頂部區域中,在那里運行查詢語句。
CREATE (a:Person { name: 'Jane Doe', favorite_color: 'purple' }) CREATE (b:Person { name: 'John Doe' }) CREATE (c:Person { name: 'Mary Smith', favorite_color: 'red', dob: '1992-11-09' }) CREATE (d:Person { name: 'Robert Roe' }) CREATE (e:Person { name: 'Rhonda Roe' }) CREATE (f:Person { name: 'Ryan Roe' }) CREATE (t:City { name: 'Petaluma, CA' }) CREATE (u:City { name: 'Cypress, TX' }) CREATE (v:City { name: 'Grand Prairie, TX' }) CREATE (w:City { name: 'Houston, TX' })
 
注意,在標簽前的字符就是變量。這些信息會在出現在各個地方,但我們在這里并不會用到。但你不能不指定相應信息就盲目創建,所以我們使用它們然后就忽略它們。
 
在上面一共創建了 10 個節點和 13 個屬性。想查看它們? 通過下面語句來匹配查詢所有節點:
MATCH (n) RETURN n
 
這條語句會返回一個可視化的圖。(在應用內,你可以在返回的圖中使用”全屏”按鈕來查看大圖)。你將會看到類似下面的圖像:
Neo4j和圖數據庫起步
 
添加關系需要一點技巧;你需要連接的節點必須是 “在限定范圍內的”,意思連接的節點是在當前查詢語句所限定的范圍內的。我們之前使用的查詢語句范圍太大,所以讓我們找到 John 和 Jane 并讓他們結婚:
MATCH (a:Person),(b:Person) WHERE a.name='Jane Doe' AND b.name='John Doe' CREATE (a)-[r:MARRIAGE {date: '2017-03-04', place: 'Houston, TX'}]->(b)
 
這條語句會創建一個關系并設置兩個屬性。重新運行該 MATCH 語句會顯示那個關系。你可以通過鼠標點擊任意的節點或關系來查看它們的屬性。
 
我們來添加其它的關系。比起使用一些列的 MATCH 語句,我會一次性做完并從中 CREATE 創建多個關系。
MATCH (a:Person),(b:Person),(c:Person),(d:Person),(e:Person),(f:Person),(t:City),(u:City),(v:City),(w:City) WHERE a.name='Jane Doe' AND b.name='John Doe' AND c.name='Mary Smith' AND d.name='Robert Roe' AND e.name='Rhonda Roe' AND f.name='Ryan Roe' AND t.name='Petaluma, CA' AND u.name='Cypress, TX' AND v.name='Grand Prairie, TX' AND w.name='Houston, TX' CREATE (d)-[m2:MARRIAGE {date: '1990-12-01', place: 'Chicago, IL'}]->(e) CREATE (a)-[n:CHILD]->(c) CREATE (d)-[n2:CHILD]->(f) CREATE (e)-[n3:CHILD]->(f) CREATE (b)-[n4:STEPCHILD]->(c) CREATE (a)-[o:BORN_IN]->(v) CREATE (b)-[o2:BORN_IN]->(t) CREATE (c)-[p:DATING]->(f) CREATE (a)-[q:LIVES_IN]->(u) CREATE (b)-[q1:LIVES_IN]->(u) CREATE (a)-[r:WORKS_IN]->(w) CREATE (a)-[s:FRIEND]->(d) CREATE (a)-[s2:FRIEND]->(e)
 
重新運行該 MATCH 語句,你將會看到下面圖像:
Neo4j和圖數據庫起步
 
如果你喜歡,你可以將節點拖拉成像我之前畫的圖的樣子。
 
在這個例子中,我們唯一使用的 MATCH 就是 MATCH 所有的東西。下面這個查詢會返回兩個結婚了的夫妻并顯示他們之間的關系:
MATCH (a)-[b:MARRIAGE]->(c) RETURN a,b,c
 
在一個更復雜的圖中,你可以做更多的細節查詢。(譯注:此例子為 Neo4j 自帶例子的)例如,你有關于電影和人的節點,還有像 ACTED IN、DIRECTED、WROTE SCREENPLAY 等屬性的關系,你可以運行下面這個查詢:
MATCH (p:Person { name: 'Mel Gibson' })--(m:Movie) RETURN m.title
 
……上述是查詢和 Mel Gibson 相關的所有影片。但如果你想查詢他演過的所有電影,下面這條語句會更有用:
MATCH (p:Person { name: 'Mel Gibson' })-[r:ACTED_IN]->(m:movie) RETURN m.title,r.role
 
還有更多更炫酷的 Cypher 語句可以使用,但我們就簡單介紹這些。更詳細完整的 Cypher 語句可以在 Neo4j 的官網上查看(https://neo4j.com/docs/developer-manual/current/cypher/), 并且也有很多例子可以練習。
 
在此系列的下篇文章中,我們會通過寫些 Perl 腳本來展示如何在應用中使用圖數據庫。
 
本文永久更新地址:http://www.4179693.live/linux/33026.html
601268股票行情中心