Neo4j学习笔记

转载自:https://blog.youkuaiyun.com/zhangweijiqn/article/details/53214069

在构建知识图谱的时候,Neo4j用来建立实体之间的关系非常方便,下面简单介绍一下它的使用方法:

开发者教程:http://neo4j.com/docs/developer-manual/3.0/ (Cypher
clauses:4.2. Patterns in Practice)
安装:
https://neo4j.com/download/ 下载For Individuals版本
https://neo4j.com/download-thanks/?edition=community&flavour=unix&release=3.0.3&_ga=1.125354882.980633886.1467375987

Open up your terminal/shell.

Extract the contents of the archive, using:

tar -xf .

For example,

tar -xf neo4j-community-3.0.3-unix.tar.gz

the top level directory is referred to as NEO4J_HOME

Run Neo4j using,

$NEO4J_HOME/bin/neo4j console

Instead of ‘neo4j console’, you can use neo4j start to start the server process in the background.

$bin/neo4j

Usage: neo4j { console | start | stop | restart | status }

$bin/neo4j start

Starting Neo4j.

WARNING: Max 1024 open files allowed, minimum of 40000 recommended. See the Neo4j manual.

Started neo4j (pid 24179). By default, it is available at http://localhost:7474/

There may be a short delay until the server is ready.

$bin/neo4j status

Neo4j is running at pid 24179

Visit http://localhost:7474 in
your web browser.

Change the password for the ‘neo4j’ account.

conf目录下是neo4j的配置文件,其中可以修改一些设置,如:

Paths of directories in the installation.

dbms.directories.data=data

dbms.directories.plugins=plugins

dbms.directories.certificates=certificates

dbms.security.auth_enabled=false #关闭认证

修改密码在http://localhost:7474中,输入如下命令:

:server change-password

You can use the command :help server to
see available authentication commands.

注:如果出现修改完密码后登录不了,重装后使用默认密码同样报错,尝试重启

在打开的页面中会有相关的使用文档,选择Cypher,在显示的列表中,双击Cypher代码即可填充到输入框中,点击运行即可得到运行结果:

注意:(1)在输入Cypher语句后,要看到效果,需要添加return语句。(2)回车会自动执行,shift+Enter可在代码中进行

显示的设置: 点击图上面的对象,在下方可以设置颜色和大小,还可以用来设置node显然哪个属性的值。

Cypher语法
Creating Data

create

CREATE (a:Person { name:”Tom Hanks”,born:1956 }) //创建实体 (),类型Person,属性{},该实体赋值给变量a

-[r:ACTED_IN { roles: [“Forrest”]}] //创建关系 -[],类型ACTED_IN,属性{},

->(m:Movie { title:”Forrest Gump”,released:1994 }) //关系对应实体 ->(),类型Movie,属性{},该实体会被创建,如果关联已有的需要MATCH操作。

CREATE (d:Person { name:”Robert Zemeckis”, born:1951 })-[:DIRECTED]->(m) //后面的

RETURN a,d,r,m

创建出来的图如下:

!
这里写代码片

创建一些测试数据:

CREATE (matrix:Movie { title:”The Matrix”,released:1997 })CREATE (cloudAtlas:Movie { title:”Cloud Atlas”,released:2012 })CREATE (forrestGump:Movie { title:”Forrest Gump”,released:1994 })CREATE (keanu:Person { name:”Keanu
Reeves”, born:1964 })CREATE (robert:Person { name:”Robert Zemeckis”, born:1951 })CREATE (tom:Person { name:”Tom Hanks”, born:1956 })CREATE (tom)-[:ACTED_IN { roles: [“Forrest”]}]->(forrestGump)CREATE (tom)-[:ACTED_IN { roles: [‘Zachry’]}]->(cloudAtlas)CREATE
(robert)-[:DIRECTED]->(forrestGump)

边可以带有属性,如ACTED_IN关系带有roles属性,同样边的属性可以用来查找:

match ()-[r:ACTED_IN]->()

where r.pro1=”hello world”

return r

Matching Patterns

match

MATCH (m:Movie) //匹配Movie类型实体,保存到变量m中。RETURN m

MATCH (p:Person { name:”Keanu Reeves” }) //匹配Person类型实体,并且name是Keanu ReevesRETURN p

MATCH (p:Person { name:”Tom Hanks” })-[r:ACTED_IN]->(m:Movie) //配置实体+关系RETURN m.title, r.roles
Attaching Structures

match+create

MATCH (p:Person { name:”Tom Hanks” }) //匹配名称为Tom Hanks的Person,如果p没有匹配的结果,下面的create都不会执行。CREATE (m:Movie { title:”Cloud Atlas”,released:2012 })CREATE (p)-[r:ACTED_IN { roles: [‘Zachry’]}]->(m)RETURN p,r,m

Completing Patterns

merge == match + create

MERGE (m:Movie { title:”Cloud Atlas” })
//先匹配在创建,即如果存在就不创建,如果不存在就创建。 Merge()内的是条件,Merge是node层面上的merge,并非属性ON CREATE SET m.released = 2012 // ON执行的具体操作。RETURN m

MATCH (m:Movie { title:”Cloud Atlas” })MATCH (p:Person { name:”Tom Hanks” })MERGE (p)-[r:ACTED_IN]->(m) //创建关系,要检查两个实体是否已经存在。ON CREATE SET r.roles =[‘Zachry’]RETURN p,r,m

CREATE (y:Year { year:2014 })MERGE (y)<-[:IN_YEAR]-(m10:Month { month:10 }) //会创建关系以及实体MERGE (y)<-[:IN_YEAR]-(m11:Month { month:11 })RETURN y,m10,m11

Filtering Results

match-where

MATCH (m:Movie)WHERE m.title = “The Matrix” //属性条件的判断。RETURN m

MATCH (p:Person)-[r:ACTED_IN]->(m:Movie)WHERE p.name =~ “K.+” OR m.released > 2000 OR “Neo” IN r.rolesRETURN p,r,m

MATCH (p:Person)-[:ACTED_IN]->(m)WHERE
NOT (p)-[:DIRECTED]->()RETURN p,m

Returning Results

MATCH (p:Person)RETURN p, p.name AS name, upper(p.name), coalesce(p.nickname,”n/a”) AS nickname, { name: p.name, label:head(labels(p))} AS person

Aggregating Information

MATCH (:Person)RETURN count(*) AS people

MATCH (actor:Person)-[:ACTED_IN]->(movie:Movie)<-[:DIRECTED]-(director:Person)RETURN actor,director,count(*) AS collaborations

4.1. Patterns

该节的内容是如何进行node/relationship模式匹配

4.1.1. Node Syntax

()(matrix)(:Movie)(matrix:Movie)(matrix:Movie {title: “The Matrix”})(matrix:Movie {title: “The Matrix”, released: 1997})

4.1.2. Relationship Syntax

–>-[role]->-[:ACTED_IN]->-[role:ACTED_IN]->-[role:ACTED_IN {roles: [“Neo”]}]->

创建索引:

CREATE INDEX ON :Country(name)
9.8. Importing CSV files with Cypher

9.3. Set

The SET clause is used to update labels on nodes and properties on nodes and relationships.

可以对属性值进行update,add和remove

9.3.1. Set a property

9.3.2. Remove a property

9.3.4. Adding properties from maps

9.3.8. Set a label on a node

MATCH (n { name: ‘Stefan’ })

SET n :German

RETURN n
13.5.4. Merge Into
When both the start and end node have already been found, merge-into is used to find all connecting relationships or creating a new relationship between the two nodes.

CYPHER planner=ruleMATCH (p:Person { name: “me” }),(f:Person { name: “Andres” })MERGE (p)-[:FRIENDS_WITH]->(f)

可以直接在文档
http://neo4j.com/docs/developer-manual/3.0/#cypher-query-lang 中搜索其他功能,如 delete,功能如下:

The DELETE clause is used to delete graph elements — nodes, relationships or paths.

The REMOVE clause is used to remove properties and labels from graph elements.

MATCH (n:Useless)DELETE n

Delete all nodes and relationships:

MATCH (n)DETACH DELETE n

上面的方式会将node和relations都删除,但这种删除方式仍会有一些信息未清空(如Property keys),彻底删除数据库使用如下方式:

bin/neo4j stop

rm -rf data/databases/graph.db

bin/neo4j start
python接口:

在文档中搜索 python,文档中15节可以看到各个语言调用的说明:http://neo4j.com/docs/developer-manual/3.0/#cypher-query-lang

python代码 添加neo4j节点和关系可以使用已有的py2neo ,也可以自己写方法进行插入,需要python代码的可以联系我。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值