Neo4j笔记

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

开发者教程: http://neo4j.com/docs/developer-manual/3.0/Cypher clauses: 4.2. Patterns in Practice
安装: https://neo4j.com/download/ 下载 For Individuals版本
  1. Open up your terminal/shell.
  2. Extract the contents of the archive, using:
tar -xf  <filecode>.
For example,
tar -xf neo4j-community-3.0.3-unix.tar.gz
the top level directory is referred to as NEO4J_HOME
  1. 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
  1. Visit http://localhost:7474 in your web browser.
  2. 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.
可以对属性值进行 updateaddremove
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代码的可以联系我。




猜你喜欢

转载自blog.csdn.net/zhangweijiqn/article/details/53214069