歡迎光臨
每天分享高質量文章

Neo4j 和圖資料庫起步

我們將安裝 Neo4j 並透過網頁客戶端在圖中插入並查詢資料。
— Ruth Holloway


編譯自 | https://opensource.com/article/17/7/neo4j-graph-databases-getting-started 
 作者 | Ruth Holloway
 譯者 | happygeorge01

在這個三篇文章系列中的第二篇中,安裝 Neo4j 並透過網頁客戶端來在圖中插入和查詢資料。

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

可透過 他們的網站[3] 下載社群版的 Neo4j!你可以下載 Windows 或 OSX 版來測試,也有各 Linux 發行版對應的版本,還有 Docker 版。

我會在 Debian 9 (stretch) 上安裝軟體。你可在 這裡[4] 檢視完整說明。如果你正在使用 Debian 8 (jessie) 或更老的版本,你可以安裝當前的版本,但會出現的一點小問題是 jessie 中並沒有安裝 Neo4j 執行所需要的 Java 8 環境。

  1. 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 ,取消註釋了下麵這行:

  1. dbms.connectors.default_listen_address=0.0.0.0

在重啟 Neo4j 之後,我可以透過 7474 埠來訪問伺服器的 Neo4j 服務。預設的使用者名稱和密碼是 Neo4j 和 neo4j; 你需要設定一個新密碼,然後會出現初始頁面:

Installing Neo4J

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

Graph database image 2, defining a new type of node

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

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

  1. 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 個屬性。想檢視它們? 透過下麵陳述句來匹配查詢所有節點:

  1. MATCH (n) RETURN n

這條陳述句會傳回一個視覺化的圖。(在應用內,你可以在傳回的圖中使用”全屏”按鈕來檢視大圖)。你將會看到類似下麵的影象:

Visual graph

新增關係需要一點技巧;你需要連線的節點必須是 “在限定範圍內的in scope”,意思連線的節點是在當前查詢陳述句所限定的範圍內的。我們之前使用的查詢陳述句範圍太大,所以讓我們找到 John 和 Jane 並讓他們結婚:

  1. 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建立多個關係。

  1. 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

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

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

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

在一個更複雜的圖中,你可以做更多的細節查詢。(LCTT 譯註:此例子為 Neo4j 自帶例子的)例如,你有關於電影和人的節點,還有像 ACTED INDIRECTEDWROTE SCREENPLAY 等屬性的關係,你可以執行下麵這個查詢:

  1. MATCH (p:Person { name: 'Mel Gibson' })--(m:Movie) RETURN m.title

……上述是查詢和 Mel Gibson 相關的所有影片。但如果你想查詢他演過的所有電影,下麵這條陳述句會更有用:

  1. MATCH (p:Person { name: 'Mel Gibson' })-[r:ACTED_IN]->(m:movie) RETURN m.title,r.role

還有更多更炫酷的 Cypher 陳述句可以使用,但我們就簡單介紹這些。更詳細完整的 Cypher 陳述句可以在 Neo4j 的官網[5]上檢視, 並且也有很多例子可以練習。

在此係列的下篇文章中,我們會透過寫些 Perl 指令碼來展示如何在應用中使用圖資料庫。


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

作者:Ruth Holloway[7] 譯者:happygeorge01 校對:wxy

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

LCTT 譯者

happygeorge01 ?
共計翻譯:1 篇
貢獻時間:1 天


推薦文章

< 左右滑動檢視相關文章 >

點選圖片、輸入文章 ID 或識別二維碼直達

贊(0)

分享創造快樂