天天看点

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