docker安装neo4j及py2neo的使用
一、安装
#拉取容器,不要拉最新版的,最新版的有bug docker pull neo4j:3.4 #拉取可能会很慢或中断,可以使用阿里云加速地址 vim /etc/docker/daemon.json #your_id你自己的阿里云ID号 --registry-mirror=https://{your_id}.mirror.aliyuncs.com
#启动容器 docker run -it -d -p 7474:7474 -p 7687:7687 neo4j:3.4
docker run \ --publish=7474:7474 --publish=7687:7687 \ --volume=/Users/ffm1110/neo4j/data:/data \ --volume=/Users/ffm1110/neo4j/logs:/logs \ --volume=/Users/ffm1110/neo4j/conf:/var/lib/neo4j/conf\ --volume=/Users/ffm1110/neo4j/import:/var/lib/neo4j/import \ --env=NEO4J_dbms_memory_pagecache_size=2G \ --env=NEO4J_dbms_memory_heap_max__size=8G \ --name=neo4j \ -d neo4j:3.4
二、修改密码
方法一
进入ip:7474,初始账号密码neo4j,登入后修改密码
方法二 #container容器id docker exec --interactive --tty <container> bin/cypher-shell
三、访问
#http://服务器的ip:7474
四、py2neo
import pandas as pd from py2neo import Graph, Node, Relationship, NodeMatcher #连接neo4j数据库,输入地址、用户名、密码 graph = Graph('http://*.*.*.*:7474', username='neo4j', password='neo4j') df=pd.read_excel(r"company.xlsx")
#创建公司名节点 for i in range(df.shape[0]): company=df.iloc[i, :][0] node = Node("COMPANY", company=company, ) graph.create(node)
#创建公司信息节点 for i in range(df.shape[0]): columns = df.columns.to_list() for j in columns[1:]: _node = df.iloc[i, :][j] node = Node("INFO", _node=_node,column=j) graph.create(node)
#建立公司信息关系 for i in range(df.shape[0]): company = df.iloc[i, :][0] matcher = NodeMatcher(graph) company_node = matcher.match("COMPANY", company=company).first() columns=df.columns.to_list() for j in columns[1:]: _node=df.iloc[i, :][j] _node=matcher.match("INFO", _node=_node,column=j).first() # print(_node,j,company_node) relationship = Relationship(_node, j, company_node) graph.create(relationship)
数据从天眼查爬取的
数据文件:https://pan.baidu.com/s/1g_UYUVpG9KV9T1eA6PReZQ 密码:e662
五、cypher常用查询
查询所有数据 match (n) return n 查询所有数据,并限制查询数据量 match (n) return n limit 10 查询某个标签的所有节点 match (c:COMPANY) return c limit 10 查询某个标签的所有节点的指定属性 match (i:INFO) return i.column limit 100 查询某个标签的所有节点的指定属性 match (i:INFO) return i.column='公司类型' limit 100 match (i:INFO { column:'公司类型' } ) return i 查询注册资金都是60万相关的公司名 match (i:INFO{_node:'60万人民币'})--(COMPANY) return i,COMPANY 查询整个图中所存在的关系 match (i:INFO)-[r]-(company:COMPANY) return type(r) 查询整个图中所存在的关系并去除结果中的重复元素 match (i:INFO)-[r]-(company:COMPANY) return distinct type(r)
查询2家公司相同的信息
match (c1:COMPANY{company:"上海贯德国际贸易有限公司"}),(c2:COMPANY{company:"甘肃谷森新能源科技有限公司"}),r=((c1)-[*..3]-(c2)) return r