Linux中國

Neo4j 和圖資料庫起步

在本系列的 第一篇 中,我們介紹了圖資料庫中的一些核心概念。在這篇,我們將安裝 Neo4j 並通過網頁客戶端在圖中插入並查詢數據。

可通過 他們的網站 下載社區版的 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 服務。默認的用戶名和密碼是 Neo4jneo4j; 你需要設置一個新密碼,然後會出現初始頁面:

![Installing Neo4J](/data/attachment/album/201712/19/231454aittpk1krptqt18b.jpg "Installing Neo4J")

讓我們在 Neo4j 上創建上篇文章中使用過的圖。如下圖:

![Graph database image 2, defining a new type of node](/data/attachment/album/201712/19/231456p4aq7bl0r7g4rlgb.jpg "Graph database image 2, defining a new type of node")

類似 MySQL 和其它的資料庫系統,Neo4j 的各類操作也使用一套查詢語句。Cypher,就是 Neo4j 使用的查詢語句,但有一些語法區別需要去學習和注意。 節點 node 需要用圓括弧表示,而 關係 relationship 需要放在方括弧中。因為這是系統中唯二的數據類型,所以了解這些就夠了。

首先,我們創建所有的節點。你需要將下面內容複製黏貼到瀏覽器頂部區域中,在那裡運行查詢語句。

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

這條語句會返回一個可視化的圖。(在應用內,你可以在返回的圖中使用」全屏」按鈕來查看大圖)。你將會看到類似下面的圖像:

![Visual graph](/data/attachment/album/201712/19/231457od2s2qsh9q2oosmq.jpg "Visual graph")

添加關係需要一點技巧;你需要連接的節點必須是 「 在限定範圍內的 in scope 」,意思連接的節點是在當前查詢語句所限定的範圍內的。我們之前使用的查詢語句範圍太大,所以讓我們找到 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 語句,你將會看到下面圖像:

![Graph after re-querying with MATCH](/data/attachment/album/201712/19/231459gq3b2lggwp6babbn.jpg "Graph after re-querying with MATCH")

如果你喜歡,你可以將節點拖拉成像我之前畫的圖的樣子。

在這個例子中,我們唯一使用的 MATCH 就是 MATCH 所有的東西。下面這個查詢會返回兩個結婚了的夫妻並顯示他們之間的關係:

MATCH (a)-[b:MARRIAGE]->(c) RETURN a,b,c

在一個更複雜的圖中,你可以做更多的細節查詢。(LCTT 譯註:此例子為 Neo4j 自帶例子的)例如,你有關於電影和人的節點,還有像 ACTED INDIRECTEDWROTE 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 的官網上查看, 並且也有很多例子可以練習。

在此系列的下篇文章中,我們會通過寫些 Perl 腳本來展示如何在應用中使用圖資料庫

via: https://opensource.com/article/17/7/neo4j-graph-databases-getting-started

作者:Ruth Holloway 譯者:happygeorge01 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國