[bigdata-082] 图数据库neo4j安装运行界面文档python3开发示例

来源:互联网 发布:剑客抢购软件 编辑:程序博客网 时间:2024/05/22 05:10
1. 官网
https://neo4j.com/
源码地址 https://github.com/neo4j


2. 下载
wget https://neo4j.com/artifact.php?name=neo4j-community-3.2.0-unix.tar.gz


3. 安装
tar xvf neo4j-community-3.2.0-unix.tar.gz


4. 以console方式运行
./bin/neo4j console


5.或者 以服务方式运行
./bin/neo4j server
注意:4和5任选一个。


6. 在浏览器登录http://localhost:7474
需要输入用户名和密码,默认值都是neo4j
更改新密码为123456


7. 关于服务
You are connected as user neo4j
to the server bolt://localhost:7687
Connection credentials are stored in your web browser.




8. neo4j核心
8.1 定义
nodes: 图数据记录
relationships: 连接nodes的边,也叫关系
properties: 属性值


8.2 图数据库
8.2.1 一个节点,就是一个最小的图数据库
8.2.2 对节点加个标签label,比如"persion"标签。标签也可以有属性值。一个节点可以有0各或者多个标签。
8.2.3 连接数据--给两个节点加上一个标签表示连接关系。关系是有向的,关系是有类型的。




9 开发手册
https://neo4j.com/docs/developer-manual/3.2/
这个手册有些连接打不开,奇怪。




10. neo4j的python3开发
10.1 驱动地址
https://neo4j.com/docs/developer-manual/current/drivers/get-started/
10.2 安装python3驱动
pip3 install neo4j-driver


10.3 启动服务
./bin/neo4j start
Active database: graph.db
Directories in use:
  home:         /home/brian/usr/neo4j/neo4j-community-3.2.0
  config:       /home/brian/usr/neo4j/neo4j-community-3.2.0/conf
  logs:         /home/brian/usr/neo4j/neo4j-community-3.2.0/logs
  plugins:      /home/brian/usr/neo4j/neo4j-community-3.2.0/plugins
  import:       /home/brian/usr/neo4j/neo4j-community-3.2.0/import
  data:         /home/brian/usr/neo4j/neo4j-community-3.2.0/data
  certificates: /home/brian/usr/neo4j/neo4j-community-3.2.0/certificates
  run:          /home/brian/usr/neo4j/neo4j-community-3.2.0/run
Starting Neo4j.
WARNING: Max 1024 open files allowed, minimum of 40000 recommended. See the Neo4j manual.
Started neo4j (pid 8325). It is available at http://localhost:7474/
There may be a short delay until the server is ready.
See /home/brian/usr/neo4j/neo4j-community-3.2.0/logs/neo4j.log for current status.


注意启动信息:
启动后,活动的neo4j的库是graph.db,它的数据存储在neo4j的目录下的data/databases/graph.db这个目录。


在浏览器输入http://localhost:7474/,可以看到图形界面。
You are connected as user neo4j
to the server bolt://localhost:7687
Connection credentials are stored in your web browser.


10.4 用python3实现第一个例子
----------------------------
#!/usr/bin/env python3
#!-*- coding:utf-8 -*-


from neo4j.v1 import GraphDatabase


uri = "bolt://localhost:7687"
driver = GraphDatabase.driver(uri, auth=("neo4j", "123456"))


def print_friends_of(name):
    with driver.session() as session:
        with session.begin_transaction() as tx:
            for record in tx.run("MATCH (a:Person)-[:KNOWS]->(f) "
                                 "WHERE a.name = {name} "
                                 "RETURN f.name", name=name):
                print(record["f.name"])


print_friends_of("Alice")
----------------------------




10.5 driver object
一个driver object管理一个neo4j的一个实例,包括这个实例下的所有数据库,包括url,帐号密码,配置。它管理一个连接池,由管理Session实例。
---------------------------
from neo4j.v1 import GraphDatabase
uri = "bolt://localhost:7687"
driver = GraphDatabase.driver(uri, auth=("neo4j", "123456"))
---------------------------


10.6 cypher sessions
一个session是一个逻辑上下文,它是neo4j的事务单元的运行环境。


10.7 type system类型系统
这里包括Node, Relationship, Path。




11. Cypher语法
11.1 创建一个只有一节点的图,其实也就是数据
CREATE (ee:Person { name: "Emil", from: "Sweden", klout: 99 })
创建这个节点后,数据就写入到文件持久化存储了,neo4j关闭重启节点都会在。
11.2 从图里查找一个节点
MATCH (ee:Person) WHERE ee.name = "Emil" RETURN ee;
MATCH (ee {name: "Emil"}) RETURN tom
11.3 创建更多的节点
MATCH (ee:Person) WHERE ee.name = "Emil"
CREATE (js:Person { name: "Johan", from: "Sweden", learn: "surfing" }),
(ir:Person { name: "Ian", from: "England", title: "author" }),
(rvb:Person { name: "Rik", from: "Belgium", pet: "Orval" }),
(ally:Person { name: "Allison", from: "California", hobby: "surfing" }),
(ee)-[:KNOWS {since: 2001}]->(js),(ee)-[:KNOWS {rating: 5}]->(ir),
(js)-[:KNOWS]->(ir),(js)-[:KNOWS]->(rvb),
(ir)-[:KNOWS]->(js),(ir)-[:KNOWS]->(ally),
(rvb)-[:KNOWS]->(ally)
注意,节点可以被重复加入,所有属性相同的节点可以存在。


11.4 寻找一个演员演出过的所有电影
MATCH (tom:Person {name: "Tom Hanks"})-[:ACTED_IN]->(tomHanksMovies) RETURN tom,tomHanksMovies




11.5 删除全部节点和关系
MATCH (n) DETACH DELETE n




12. 进一步细节
两个节点的关系,也叫做pattern。比如说,一个人住在一个城市  a persion LIVES_IN a city。一个城市是一个国家的一部分 a city is PART_OF a country.




简单的pattern可以再次组装成复杂模式,比如 (:person) -[:LIVES_IN]-> (:city) -[:PART_OF]-> (:Country)




12.1 node的例子
()
(matrix)
(:Movie)
(matrix:Movie)
(matrix:Movie {title: "The Matrix"})
(matrix:Movie {title: "The Matrix", released: 1997})


12.2 relationship的例子
-->
-[role]->
-[:ACTED_IN]->
-[role:ACTED_IN]->
-[role:ACTED_IN {roles: ["Neo"]}]->


"--"无向关系
"-->"和"<--"表示有向关系
[..]用于增加细节,包括变量名,属性,and/or信息。




12.3 一个复杂的组合pattern
(keanu:Person:Actor {name:  "Keanu Reeves"} )
-[role:ACTED_IN     {roles: ["Neo"] } ]->
(matrix:Movie       {title: "The Matrix"} )


变量keanu表示一个person也就是一个actor,它的属性name是"Keanu Reeves"。
变量matrix表示一个move,它的属性title是"The Matrix"
变量keanu和matrix之间有一个有向的label,keanu对matrix有ACTED_IN关系,这个relationship的变量名是role,这个relationship的属性是reoles是"neo"。




12.4 pattern可以表示为变量,比如
acted_in = (:Person)-[:ACTED_IN]->(:Movie)




13. cypher
13.1 查找一个人的朋友的朋友关系
MATCH (john {name: 'John'})-[:friend]->()-[:friend]->(fof)
RETURN john.name, fof.name
13.2 这又是一个复杂查询关系
MATCH (user)-[:friend]->(follower)
WHERE user.name IN ['Joe', 'John', 'Sara', 'Maria', 'Steve'] AND follower.name =~ 'S.*'
RETURN user.name, follower.name









原创粉丝点击