图数据库Neo4j安装
图数据库Neo4j安装
简介
Neo4j是一个高性能的,NOSQL图形数据库,它将结构化数据存储在网络上而不是表中。它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎,但是它将结构化数据存储在网络(从数学角度叫做图)上而不是表中。Neo4j也可以被看作是一个高性能的图引擎,该引擎具有成熟数据库的所有特性。程序员工作在一个面向对象的、灵活的网络结构下而不是严格、静态的表中——但是他们可以享受到具备完全的事务特性、企业级的数据库的所有好处。
官方网站
安装neo4j图数据库
1.下载neo4j社区版
从官方网站下载最新的社区版3.5.13
2.安装jdk
1yum -y install java-1.8.0
3.安装neo4j
1tar xf neo4j-community-3.5.13-unix.tar.gz -C /opt
2cd /opt
3ln -s neo4j-community-3.5.13 neo4j
4.配置neo4j
1cd neo4j
2vim conf/neo4j.conf
3dbms.connectors.default_listen_address=0.0.0.0
5.运行neo4j
1bin/neo4j start
6.systemd文件
1cat > /usr/lib/systemd/system/neo4j.service <<-EOF
2
3[Unit]
4Description=Neo4j Community Server
5After=network.target
6
7[Service]
8User=neo4j
9ExecStart=/opt/neo4j/bin/neo4j console
10ExecReload=/bin/kill -HUP \$MAINPID
11KillMode=process
12Restart=always
13RestartSec=10s
14
15[Install]
16WantedBy=multi-user.target
17EOF
18
19useradd -s /bin/false -M neo4j
20chown -R neo4j. /opt/neo4j*
21
22systemctl enable neo4j
23systemctl start neo4j
测试neo4j
访问neo4j
打开浏览器,输入服务器ip,默认端口7474,http://192.168.0.245:7474
初始用户名和密码均为neo4j
,登录上去修改密码,修改后的密码为beixi123
在网页上创建节点和关系
1# 创建具有带属性(name ,age)的 People 节点
2create(p:People{name:"Alex", age:20});
3
4create(p:People{name:"Tom", age:22});
5
6# 匹配 People节点,并返回其 name 和 age 属性
7match (p:People) return p.name, p.age
8
9# 匹配所有 age 为20的 People 节点
10match (p:People{age:20}) RETURN p
11
12# 创建 Alex 和 Tom 之间单向的 Friend 关系
13create(:People{name:"Alex", age:20})-[r:Friends]->(:People{name:"Tom", age:22})
14
15#
16match p=()-[r:RELATION]->() return p LIMIT 25
17
18# 匹配所有节点并查看其中25个
19match (n) return n LIMIT 25;
20
21# 简单粗暴删除所有节点及节点相关的关系
22match (n) detach delete n
测试演示数据
爬取数据,获取数据来源
1cat requirements.txt
2numpy==1.17.4
3pandas==0.25.3
4python-dateutil==2.8.1
5pytz==2019.3
6fake-useragent==0.1.11
1cat scapy.py
2import time
3import random
4import requests
5from lxml import etree
6import pandas as pd
7from fake_useragent import UserAgent
8
9ylq_all_star_ids = pd.DataFrame(columns = ['num', 'name', 'star_id', 'star_url', 'image'])
10total_pages=153
11for page in range(1, total_pages+1):
12 ua = UserAgent()
13 headers ={"User-Agent": ua.random,
14 'Host': 'www.ylq.com'}
15 url = 'http://www.ylq.com/star/list-all-all-all-all-all-all-all-{}.html'
16 r = requests.get(url=url.format(page), headers=headers)
17 r.encoding = r.apparent_encoding
18 dom = etree.HTML(r.text)
19
20 # 'http://www.ylq.com/neidi/xingyufei/'
21 star_urls = dom.xpath('//div[@class="fContent"]/ul/li/a/@href')
22 star_ids = [star_url.split('/')[-2] for star_url in star_urls]
23 star_names = dom.xpath('//div[@class="fContent"]/ul/li/a/h2/text()')
24 star_images = dom.xpath('//div[@class="fContent"]/ul/li/a/img/@src')
25
26 print(page, len(star_urls), len(star_ids), len(star_images), len(star_names))
27
28 for i in range(len(star_ids)):
29 ylq_all_star_ids = ylq_all_star_ids.append({'num':int((page-1)*60+i+1), 'name': star_names[i],
30 'star_id':star_ids[i], 'star_url': star_urls[i],
31 'image':star_images[i]},ignore_index=True)
32 # if page%5 == 0:
33 # time.sleep(random.randint(0,2))
34print("爬虫结束!")
执行爬取脚本
1python3 scapy.py
导入csv到neo4j
1cd /opt/neo4j/import
2wget https://github.com/DesertsX/gulius-projects/raw/master/5_YuLeQuan_Neo4j/ylq_star_nodes.csv
3wget https://github.com/DesertsX/gulius-projects/raw/master/5_YuLeQuan_Neo4j/ylq_star_relations.csv
在浏览器中执行
1LOAD CSV WITH HEADERS FROM 'file:///ylq_star_nodes.csv' AS data CREATE (:star{starname:data.name, starid:data.id});
2
3LOAD CSV WITH HEADERS FROM "file:///ylq_star_relations.csv" AS relations MATCH (entity1:star{starname:relations.subject}) , (entity2:star{starname:relations.object}) CREATE (entity1)-[:rel{relation: relations.relation}]->(entity2);
第一条命令秒开,第二条命令这边花了差不多70秒左右。
查询关系图谱
1# 查某人全部关系
2return (:star{starname:"张国荣"})-->();
1# 查某人朋友的朋友(5层关系)
2match p=(n:star{starname:"张国荣"})-[*..5]->() return p limit 50;
1# 查询特定关系
2match p=()-[:rel{relation:"旧爱"}]->() return p LIMIT 25;
1# 使用函数,查询张国荣与张卫健的最短路径
2match p=shortestpath((:star{starname:"张国荣"})-[*..5]->(:star{starname:"张卫健"})) return p;
参考资料
相关书籍
- Neo4j Cookbook -2015
- Neo4j in Action - 2014
- Building Web Applications with Python and Neo4j - 2015
- Neo4j权威指南 - 2017
- Neo4j 3.x入门经典 - 2019
- 原文作者:黄忠德
- 原文链接:https://huangzhongde.cn/post/2019-12-04-%E5%9B%BE%E6%95%B0%E6%8D%AE%E5%BA%93Neo4j%E5%AE%89%E8%A3%85/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。