天天看點

Neo4j和圖形資料庫:入門

在本系列的第一篇文章中,我們探讨了圖資料庫的一些核心概念。 這次,我們将安裝Neo4j應用程式,并開始使用Web用戶端在圖中插入和查詢資料。

要下載下傳Neo4J社群版頭像到他們的網站 ! 您可以下載下傳适用于Windows或OSX的軟體包,該軟體包可以很好地進行測試,并且在大多數Linux發行版中以及通過Docker提供了安裝連結。

我将在Debian 9(拉伸)上安裝該軟體。 您可以在此處獲得完整的說明 。 如果您運作的是Debian 8(jessie)或更舊的版本,則可以安裝目前的Neo4j軟體包,但這會更加困難,因為Neo4j需要Java 8運作時,而該軟體包未與jessie打包在一起。

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僅在本地主機上偵聽連接配接。 如果您的Debian盒子是桌上型電腦,但是我的不是,那很好。 我編輯了

/etc/neo4j/neo4j.conf

并取消了以下注釋:

dbms.connectors.default_listen_address=0.0.0.0
           

停止并重新啟動Neo4j之後,我能夠通過浏覽到端口7474上的伺服器進行連接配接。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語句,不如做一次并從中建立多個關系。

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 (a)-[b:MARRIAGE]->(c)
RETURN a,b,c
           

使用更精細的圖形,您可以進行更詳細的搜尋。 例如,如果您有一個“電影”和“人物”節點圖,并且這些關系是諸如ACTED IN,DIRECTED,WROTE SCREENPLAY等角色,則可以執行以下查詢:

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

...并以任何方式擷取與梅爾·吉布森有關的電影清單。 但是,如果您隻想看他是演員的電影,此查詢将更有用:

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

當然,可以進行更奇特的Cypher查詢,而我們隻是在這裡打起了基礎。 Neo4j網站上提供了有關Cypher語言的完整文檔,并提供了許多示例。

在本系列的下一篇文章中,我們将編寫一個Perl腳本來建立相同的圖形,以展示如何在應用程式中使用圖形資料庫。

翻譯自: https://opensource.com/article/17/7/neo4j-graph-databases-getting-started