Neo4j安装及简单使用

Neo4j安装及简单使用一 Neo4j 和图数据库简介 neo4j 是基于 Java 语言编写图形数据库 图是一组节点和连接这些节点的关系 图形数据库也被称为图形数据库管理系统或 GDBMS Neo4j 的是一种流行的图形数据库 其他的图形数据库是 OracleNoSQL 数据库 OrientDB HypherGraphD GraphBase InfiniteGrap AllegroGraph Neo4j 图形数据库的主要构建

一、Neo4j和图数据库简介

Neo4j图形数据库的主要构建块是:

  • 节点:是图表的基本单位。 它包含具有键值对的属性
  • 关系:连接两个节点,具有方向:单向和双向。每个关系包含“开始节点”或“从节点”和“到节点”或“结束节点”。关系也可以包含属性作为键值对。
  • 属性:是用于描述图节点和关系的键值对。Key =值,其中Key是一个字符串,值可以通过使用任何Neo4j数据类型来表示
  • 标签:将节点分组为集合。将一个公共名称与一组节点或关系相关联。 节点或关系可以包含一个或多个标签。 我们可以为现有节点或关系创建新标签。 我们可以从现有节点或关系中删除现有标签。
  • 数据浏览器:用于执行CQL命令并查看输出输出。

二、Neo4j安装

本人的环境是win10。因此下文介绍在win10上的安装。

2.1 安装Java JDK

2.2 下载安装Neo4j

Neo4j应用程序有如下主要的目录结构:

  • bin目录:用于存储Neo4j的可执行程序;
  • conf目录:用于控制Neo4j启动的配置文件;
  • data目录:用于存储核心数据库文件;
  • plugins目录:用于存储Neo4j的插件;

2.3 创建系统环境变量

在计算机-属性中创建系统环境变量NEO4J_HOME,并把主目录(E:\Program Files (x86)\neo4j-community-3.4.0)设置为变量值。

NEO4J_HOME=E:\Program Files (x86)\neo4j-community-3.4.0 

再在path中添加%NEO4J_HOME%\bin

2.4 Neo4j的启动和停止

法一:通过控制台启动Neo4j程序
法二:把Neo4j安装为服务

安装和卸载服务:

neo4j install-service neo4j uninstall-service 

启动服务,停止服务,重启服务和查询服务的状态:

neo4j start neo4j stop neo4j restart neo4j status 

(注意此处可能会出现问题,参考https://blog.csdn.net/weixin_/article/details/,如无法解决,看看是否以管理员方式运行cmd)
在浏览器中打开http://localhost:7474 默认跳转到 http://localhost:7474/browser,出现Neo4j界面,则安装成功。
初始密码:neo4j 进去之后可以修改密码

如果,neo4j stop不能停止neo4j,
kill -s 9 强制杀掉进程。

2.5 切换数据库

每次启动neo4j,它只能读取一个数据库。默认情况下的Graph.db数据库。

法一:修改配置文件

使用Neo3.x创建新数据库而不删除现有数据库,所以只需在$NEO4J_HOME\conf的目录编辑neo4j.conf。搜寻dbms.active_database=,其默认值应为graph.db。用其他名称替换它,然后再次启动neo4j。现在,将在该目录名下创建一个新数据库。若要切换回以前的db,请重复这些步骤,只需将新值替换为graph.db在配置文件中。
注意:如果在neo4j启动的时候修改了配置文件,则需要重新启动一次,浏览器页面才会更新。

法二:建立软连接

详见https://blog.csdn.net/programmer_at/article/details/,为linux下的方法。

三、Neo4j的CQL操作

CQL代表Cypher查询语言。 像Oracle数据库具有查询语言SQL,Neo4j具有CQL作为查询语言。

运行Neo4j之后,在软件窗口可以选择数据库创建位置,之后Neo4j就自动为我们创建好了数据库。

  • 创建唯一性约束,同时具有索引效果,类似关系型数据库中的主键。注意,这只能在数据库中还未插入数据时设置。

    CREATE CONSTRAINT ON (a:Person) ASSERT a.name IS UNIQUE;

  • 创建索引。

    CREATE INDEX ON :Person(name);

  • 查看所有的节点数和边数

    MATCH (n) RETURN count(n);
    MATCH ()-->() RETURN count(*);

  • 插入节点。插入一个Person类别的节点,且这个节点有一个属性name,属性值为Andres

    CREATE (n:Person { name : 'Andres'});

  • 插入边。插入一条a到b的有向边,且边的类别为Follow

    MATCH (a:Person),(b:Person)
    WHERE a.name = 'Node A' AND b.name = 'Node B'
    CREATE (a)-[r:Follow]->(b);

  • 更新节点。更新一个Person类别的节点,设置新的name。

    MATCH (n:Person { name: 'Andres' })
    SET n.name = 'Taylor';

  • 删除节点和与其相连的边。Neo4j中如果一个节点有边相连,是不能单单删除这个节点的。

    MATCH (n:Person { name:'Andres' })
    DETACH DELETE n;

  • 删除边。
    MATCH (a:Person)-[r:Follow]->(b:Person) WHERE a.name = 'Andres' AND b.name = 'Taylor' DELETE r; 

作为图形数据库,有一些独有的查询语句

  • 最短路径。
    MATCH (ms:Person { name:'Andres' }),(cs:Person { name:'Taylor' }), p = shortestPath((ms)-[r:Follow]-(cs)) RETURN p; 
  • 查询两个节点之间的关系。
    MATCH (a:Person { name:'Andres' })-[r]->(b:Person { name:'Taylor' }) RETURN type( r); 
  • 查询一个节点的所有Follower。
    MATCH (:Person { name:'Taylor' })-[r:Follow]->(Person) RETURN Person.name; 
  • 清空所有数据(删除所有节点和关系)
    MATCH (n) OPTIONAL MATCH (n)-[r]-() DELETE n,r 

    上面的方式会将node和relations都删除,但这种删除方式仍会有一些信息未清空(如Property keys),在linux下彻底删除数据库使用如下方式:

    >bin/neo4j stop >rm -rf data/databases/graph.db >bin/neo4j start 

    Windows中直接删除data/databases/graph.db或其他指定db中的全部数据即可。

其他参见Neo4j用户手册:Neo4j Documentation

四、导入csv文件

首先从MySQL数据库导出csv文件,复制到import文件夹E:\Program Files (x86)\neo4j-community-3.4.0\import里,然后执行下列语句:

//导入节点 电影类型 == 注意类型转换 LOAD CSV WITH HEADERS FROM "file:///genre.csv" AS line MERGE (p:Genre{gid:toInteger(line.gid),name:line.gname}) //导入节点 演员信息 LOAD CSV WITH HEADERS FROM 'file:///person.csv' AS line MERGE (p:Person { pid:toInteger(line.pid),birth:line.birth, death:line.death,name:line.name, biography:line.biography, birthplace:line.birthplace}) // 导入节点 电影信息 LOAD CSV WITH HEADERS FROM "file:///movie.csv" AS line MERGE (p:Movie{mid:toInteger(line.mid),title:line.title,introduction:line.introduction, rating:toFloat(line.rating),releasedate:line.releasedate}) // 导入关系 actedin 电影是谁参演的 1对多 LOAD CSV WITH HEADERS FROM "file:///person_to_movie.csv" AS line match (from:Person{pid:toInteger(line.pid)}),(to:Movie{mid:toInteger(line.mid)}) merge (from)-[r:actedin{pid:toInteger(line.pid),mid:toInteger(line.mid)}]->(to) //导入关系 电影是什么类型 == 1对多 LOAD CSV WITH HEADERS FROM "file:///movie_to_genre.csv" AS line match (from:Movie{mid:toInteger(line.mid)}),(to:Genre{gid:toInteger(line.gid)}) merge (from)-[r:is{mid:toInteger(line.mid),gid:toInteger(line.gid)}]->(to) 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/231377.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • spring注解解析流程_深入理解Kafka

    spring注解解析流程_深入理解Kafka前言众所周知,spring从2.5版本以后开始支持使用注解代替繁琐的xml配置,到了springboot更是全面拥抱了注解式配置。平时在使用的时候,点开一些常见的等注解,会发现往往在一

    2022年8月16日
    6
  • es6模板字符串和占位符${}「建议收藏」

    es6模板字符串和占位符${}「建议收藏」描述:  模板字符串使用反引号()来代替普通字符串中的用双引号和单引号。模板字符串可以包含特定语法(KaTeXparseerror:Expected’EOF’,got’&’atposition20:…ression})的占位符。&̲emsp; &ems…{}放变量…

    2022年8月21日
    17
  • 微信公众平台开发者社区_php微擎框架

    微信公众平台开发者社区_php微擎框架一、思考开发了几个微信项目,一直在思考:如何将微信相关的处理与业务系统联系在一起?如何做到彼此分离,且易于扩展?能否开发一套独立的微信服务框架,支持各种业务应用?二、现有常用的服务框架支持多种业务应用,我们通过分层的方式来实现。将复杂的系统进行分层,将一些功能或者特有的逻辑进行封装,封装为不同的基础服务或中间件。业务层无需关心底层具体实现,只需进行简单调用、组装

    2022年8月21日
    7
  • jdbctemplate查询为空报错_java空指针异常举例

    jdbctemplate查询为空报错_java空指针异常举例问题是在:Dao类是不能直接new出来的必须是通过ApplicationContextapplicationContext=newClassPathXMLApplicationContext(“springmvc.xml”)erDaodao=(UserDao)ac.getBean(“UserDaoId得到类UserDao的实例化从而JdbcTemplate的值才能获…

    2025年6月23日
    7
  • java实现发送邮件工具[通俗易懂]

    java实现发送邮件工具[通俗易懂]java实现发送邮件的功能:首先需要导入mail.jar;然后需要写发送方法:1、邮箱发送封装工具类:packagecom.wxjiameng.utils;importjava.util.Date;importjava.util.Properties;importjavax.activation.DataHandler;importjavax.activation.FileDa

    2022年5月14日
    33
  • 十进制数负三的二进制数补码为_-8的补码

    十进制数负三的二进制数补码为_-8的补码十进制转二进制补码(正负都可)指针初学将一个十进制正(负)整数转换为对应的二进制补码(用指针完成十进制转二进制:1.先判断该整数是正数还是负数如果是正数则二进制补码首位为1,且对应的二进制补码就是原.如果是负数则二进制补码为原码基础上取反且末位加1(加1则涉及进位)代码:#include”stdio.h”#include”Stdio.h…

    2022年10月19日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号