zoukankan      html  css  js  c++  java
  • Neo4j使用

    一、删除图

     在开发过程中,很多时候需要快(简)速(单)清(粗)除(暴)Neo4j中存在的海量数据节点和关系数据

     在这种情况下,delete和detach从性能上都已力不从心。Neo4j官方推荐清库方法,即删除graph.db数据库文件,暴力清空数据库

     1. 关闭Neo4j服务器进程

      检查服务器进程是否启动,如启动,可通过kill -9或其它方式杀掉服务器进程

     2. 删除graph.db数据库文件

      找到<NEO4J_HOME>/data/databases/路径(即安装路径和设置的系统环境变量),可以看到graph.db文件夹。删除此文件夹即可

     3. 重新启动Neo4j服务器

      通过bin目录下执行如下命令启动Neo4j

    ./neo4j console 
    

      

    二、linux下无浏览器如何重置密码

     初次登录neo4j需要重置密码,但是无图形化界面,如何重置?

     1)修改conf/neo4j.conf

    # Enable a remote shell server which Neo4j Shell clients can log in to.
    dbms.shell.enabled=true
    # The network interface IP the shell will listen on (use 0.0.0.0 for all interfaces).
    dbms.shell.host=127.0.0.1
    # The port the shell will listen on, default is 1337.
    dbms.shell.port=1337

      本地操作的话只要将注释标记删除就可以,需要远程操作则需要修改host

     2)重启neo4j

    ./neo4j start
    

     3)运行./neo4j-shell密令,输入用户名、密码(默认用户名密码均为neo4j)

      输入命令CALL dbms.changePassword('你的新密码');  输入命令退出:exit;

     注意:当然有图形化界面的话,修改密码就很方便:

    :server change-password 
    

     三、py2neo使用

     图模型:

     我们也可以使用Python连接Neo4j,我们使用pip安装py2neo之后,使用如下:

     1)连接数据库

    from py2neo import Graph
    
    g = Graph(
        host="localhost",  # neo4j 搭载服务器的ip地址,ifconfig可获取到
        http_port=7474,  # neo4j 服务器监听的端口号
        user="neo4j",  # 数据库user name,如果没有更改过,应该是neo4j
        password="root")  # neo4j数据库第一次登录时需要设置新得密码,我设置为root

      建立了连接,我们就可以使用g来操作数据库

     2)节点得建立

      在图数据库里组成部分其实很简单,节点(Node)、节点的属性(value)、关系(Relation),这也是图数据库最大的特点,举个简单的例子

      Alice与Bob为朋友关系,Alice为20岁,Bob为25岁,这里Alice和Bob就是节点,关系为朋友,节点属性就是其对应的年龄,简化成三元组表示为(节点,关系,节点),不过需要注意的是在建立关系前我们需要先建立独立节点

    from py2neo import Graph
    from py2neo import Node
    
    g = Graph(
        host="localhost",  # neo4j 搭载服务器的ip地址,ifconfig可获取到
        http_port=7474,  # neo4j 服务器监听的端口号
        user="neo4j",  # 数据库user name,如果没有更改过,应该是neo4j
        password="root")  # neo4j数据库第一次登录时需要设置新得密码,我设置为root
    
    # 建立节点 
    node0 = Node('Person' , name = 'Alice')
    node1 = Node('Person' , name = 'Bob')
     
    node0['age'] = 20
    node1['age'] = 25
    
    # 利用之前得连接,进行数据库操作 
    g.create(node0)
    g.create(node1)
    

      前面我已经建立了连接:g,这里Person表示label,在图数据库中我们需要label来表示节点,在后面的图数据库搜索当中就是依靠这个label来进行搜寻的,因此这个label需要好好表示

      后面的name其实已经表示这个节点的属性(从上面的图可以看出,节点的属性可以有多个),这里再举一个例子,一本图书叫《飘》,那么建立节点

    node = Node('Book' , name = 'Gone with the wind')
     
    g.create(node)
    # 由于节点属性为图书,因此这里label设置为Book。
    # 回到上面的Alice与Bob,age这个表示节点的属性,与name同样表示为节点的属性
    

     3)关系的建立

      假设我们已经建立的两种label,如Disease和Check,其中每种标签下面有很多Node,如label Disease下面有个Node叫心血管疾病,label Check下面有个Node叫载脂蛋白A1/载脂蛋白B比值

      我们知道心血管疾病需要做这样的检查:载脂蛋白A1/载脂蛋白B比值,所以就希望这两个标签下的该两个Node需要建立关系:

      在neo4j命令窗口可以如下操作:

    match(p:Disease),(q:Check) where p.name='心血管疾病'and q.name='载脂蛋白A1/载脂蛋白B比值' create (p)-[rel:need_check{name:'诊断检查'}]->(q)

      而利用Py2neo的话,操作如下:

    start_node = 'Disease'
    end_node = 'Check'
    p = '心血管疾病'
    q = '载脂蛋白A1/载脂蛋白B比'
    rel_type = 'need_check'
    rel_name = '诊断检查'
    
    query = "match(p:%s),(q:%s) where p.name='%s'and q.name='%s' create (p)-[rel:%s{name:'%s'}]->(q)" % (start_node, end_node, p, q, rel_type, rel_name)
    
    g.run(query)
    
    # query即为:
    # match(p:Disease),(q:Check) where p.name='心血管疾病'and q.name='载脂蛋白A1/载脂蛋白B比值' create (p)-[rel:need_check{name:'诊断检查'}]->(q)
    

      我们可以这样理解Label和Node,Label更像是类,而Node更像是类的实列化,即该类的一个对象

     4)查询节点

    sql = ["MATCH (m:Disease) where m.name = '{0}' return m.name, m.cause".format(i) for i in entities]
    
    # 在neo4j命令窗口可以如下执行:
    # MATCH (m:Disease) where m.name = '糖尿病' return m.name, m.cause
    # 这里假设已经提前创建了Label为Disease的很多疾病实体了
    # 关系语句:MATCH (m:Disease)-[r:do_eat]->(n:Food) where m.name = '发烧' return m.name, r.name, n.name
    
  • 相关阅读:
    matplotlib的使用——scatter散点图的绘制
    OpenCVPython系列之立体图像的深度图
    YOLOv3 cfg文件详解
    Opencv的使用小教程2——Opencv常用图像处理函数汇总
    数字世界中的纸张——理解 PDF
    go channel初步
    Unity学习记录 导航
    elasticsearch的keyword与text的区别
    markdownitcontainer
    Windows 编译opensll
  • 原文地址:https://www.cnblogs.com/always-fight/p/10791181.html
Copyright © 2011-2022 走看看