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
    
  • 相关阅读:
    bzoj 4012: [HNOI2015]开店
    POJ 1054 The Troublesome Frog
    POJ 3171 Cleaning Shifts
    POJ 3411 Paid Roads
    POJ 3045 Cow Acrobats
    POJ 1742 Coins
    POJ 3181 Dollar Dayz
    POJ 3040 Allowance
    POJ 3666 Making the Grade
    洛谷 P3657 [USACO17FEB]Why Did the Cow Cross the Road II P
  • 原文地址:https://www.cnblogs.com/always-fight/p/10791181.html
Copyright © 2011-2022 走看看