neo4j使用总结

1,180 阅读4分钟

登录

neo4j退出页面重新登录

:server disconnect

注:在左侧进入用户界面选取system选项,否则不能创建用户

用户创建;

CALL dbms.security.createUser(name,password,requridchangepassword) 

其中name参数是你的用户名,password是密码,requridchangepassword是表示是否需要修改密码,布尔类型。如下创建一个test1用户,密码是test1,不需要修改密码。

CALL dbms.security.createUser('test','test',false)

查看当前用户

CALL dbms.showCurrentUser()

查看所有用户

CALL dbms.security.listUsers()

删除用户

CALL dbms.security.deleteUser('username') 

username参数表示你要删除的用户名。

修改密码

CALL dbms.security.changePassword('password')

注意:password参数不能为空,或者跟原密码相同,不然会报错

忘记密码

1.找到DBMS文件夹下/conf/neo4j.conf文件,修改以下属性为false:

dbms.security.auth_enabled=false

2.在浏览器终端,执行以下语句,切换到system用户:

:use system

3.修改neo4j用户的密码:

ALTER USER neo4j SET PASSWORD '123456';

4.关闭neo4j,将修改的conf配置文件修改回去或注释掉:

dbms.security.auth_enabled=true
#dbms.security.auth_enabled=false

5.重启neo4j即可。 官方文档:neo4j.com/docs/operat…

删除数据库

match (n) detach delete n

查询指令

MATCH p=(n:Node)-[r]->() where n.name = 'The Kentucky Fried Movie' RETURN p #匹配对应节点的所有关系和节点  

MATCH p=(nn:Node)-[r]->(n:Node) where ID(nn) = 9 RETURN p #也可改写为ID匹配条件 若匹配nn的ID则输出子图均为箭头朝外,若匹配n的ID则输出子图均为箭头朝内 

match(n:Node) where n.name='Thelma Todd' return n #匹配指定节点  

match q=(n:Node)-[r:directed_by|written_by|starred_actors]-()-[r2:directed_by|written_by|starred_actors]-()-[r3:release_year]-() where n.name="Fool's Gold" return q #查询深度为3的路径,每层深度的关系按照指定的命令查询

MATCH p=()-[*4..5]-() RETURN p LIMIT 200 #查询深度45的路径图

创建节点

CREATE(n) #创建一个节点
CREATE(n:Movie) #创建一个带有Movie标签的节点
CREATE(n:Movie:Person) #创建带有多个标签(Movie、Person)的节点

CREATE(n:TEST {name:'TEST-NAME1', age:2}) return n # 创建一个带有标签(TEST)和属性(name:'TEST-NAME', age:1)的节点

创建关系

创建两个节点之间的关系

MATCH (a:TEST),(b:TEST)
WHERE a.name = 'TEST-NAME' AND b.name = 'TEST-NAME1'
CREATE (a)-[r:RELTYPE] -> (b)
RETURN r

创建两个节点之间的关系,并调用两个节点的属性

MATCH (a:TEST),(b:TEST)
WHERE a.name = 'TEST-NAME' AND b.name = 'TEST-NAME1'
CREATE (a)-[r:RELTYPE { name: a.name + b.name}] -> (b)
RETURN r

创建3个节点,两个关系的路径

CREATE p = (a:TEST{name:'TEST-NAME'}) - [:rel3] -> (node) <- [:rel3] - (b:TEST{name:'TEST-NAME1'})
RETURN p

修改Neo4j中节点的颜色

:style

将以下代码保存为color.grass,之后拖拽进neo4j的界面

node {
  diameter: 50px; //全部节点的大小
  color: #A5ABB6;
  border-color: #9AA1AC;
  border-width: 2px;
  text-color-internal: #FFFFFF;
  font-size: 16px; //节点字体的大小
}
relationship {
  color: #A5ABB6;
  shaft-width: 1px;
  font-size: 12px;
  padding: 3px;
  text-color-external: #000000;
  text-color-internal: #FFFFFF; //所有关系边的文本颜色
  caption: "<type>";
}
node.Node {
  color: #C0504D; //类型为Node这个节点的颜色
  border-color: #9B3937; //类型为Node这个节点的边框颜色
  text-color-internal: #FFFFFF; //文本颜色
  defaultCaption: "<id>";
  caption: "{name}";
  diameter: 80px; //节点大小
}
relationship.starred_actors {
  shaft-width: 3px;
}
relationship.directed_by {
  shaft-width: 3px; //边的粗细
  color: #F16667;  //对应关系边的颜色
  border-color: #eb2728; //边的边框颜色
  text-color-internal: #FFFFFF; //边的文本颜色

}
relationship.release_year {
  shaft-width: 3px;
}
relationship.has_tags {
  shaft-width: 3px;
}
relationship.written_by {
  shaft-width: 3px;
}
relationship.has_genre {
  shaft-width: 3px;
}
relationship.in_language {
  shaft-width: 3px;
}
relationship.has_imdb_votes {
  shaft-width: 3px;
}
relationship.has_imdb_rating {
  shaft-width: 3px;
}

将csv文件导入数据库

文件内容格式

image.png

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @File     : txt2neo.py
# @Time     : 2023/4/17 15:40

import pandas as pd
from py2neo import Graph, Node, Relationship, NodeMatcher

def txt2csv(txtname):
    df = pd.read_csv(txtname, delimiter="|",
                     # names=["S", "P", "O"]
                     )
    # print(df)
    df.to_csv("tiny_kb1.csv", encoding='utf-8', index=False)


def csv2neo():
    # 读取Excel文件
    df = pd.read_csv('pseudo.csv', names=["S", "P", "O"])

    # 取前610行作为图谱数据
    # df = df.iloc[:706, :]

    # 连接Neo4j服务
    # graph = Graph('http://localhost:7474/',auth=("neo4j","neo4j")) # 这种写法无效
    graph = Graph(host="localhost", auth=("neo4j", "neo4j")) 

    # 创建节点
    nodes = set(df['S'].tolist()+df['O'].tolist())
    for node in nodes:
        node = Node("Node", name=node)
        graph.create(node)

    print('create nodes successfully!')

    # 创建关系
    matcher = NodeMatcher(graph)
    for i in range(df.shape[0]):
        S = df.iloc[i, :]['S']  # S节点
        O = df.iloc[i, :]['O']  # O节点
        s_node = matcher.match("Node", name=S).first()
        o_node = matcher.match("Node", name=O).first()

        # 创建关系
        P = df.iloc[i, :]['P']
        relationship = Relationship(s_node, P, o_node)
        graph.create(relationship)

    print('create relationships successfully!')
    print('You can check Neo4j now!')


    
    # MATCH p=(n:Node)-[r]->() where n.name = 'I Am a Sex Addict' RETURN p #匹配对应节点的所有关系和节点
    # MATCH p=(nn:Node)-[r]->(n:Node) where ID(nn) = 9 RETURN p #也可改写为ID匹配条件 若匹配nn的ID则输出子图均为箭头朝外,若匹配n的ID则输出子图均为箭头朝内
    # match(n:Node) where n.name='Thelma Todd' return n #匹配指定节点
    

if __name__ == "__main__":
    # txtname = "tiny_kb.txt"
    # txt2csv(txtname)
    csv2neo()