neo4j

Neo4j笔记(二)Cypher(3)NULL

对着背影说爱祢 提交于 2019-12-08 05:10:45
Cypher中的NULL和SQL中的NULL有一些不同,SQL中的NULL表示这个字段没有值,在建表的时候可以添加非控约束,而Cypher中的null表示某个节点没有这个这段属性。一个表示这个字段没有值,一个表示没有这个字段。Cypher中可以使用 is null 判断某个节点是否有某个字段属性。 null不同于其他类型值,不能直接使用 = 判断某个字段是否为null,同时 null = null 也是没有意义的,结果还是null。null is null返回true。需要注意的是并不是null参与的运算都为null,尤其是逻辑运算。 1、逻辑运算 x y x AND y x OR y x XOR y false null false null null true null null true null null null null null null 2、in运算 return 3 in [] //返回false,并不是null return 3 in [1,2,null] //返回null,并不是false return null in [1,2,3] //返回null,并不是false return null in [1,2,null] //返回null,并不是true 3、is运算 判断为null:x is null 判断非null:x is not null //注意不是

Neo4j 第三篇:Cypher查询入门

爷,独闯天下 提交于 2019-12-08 05:10:36
转至: https://www.cnblogs.com/ljhdo/p/5516793.html Neo4j使用Cypher查询图形数据,Cypher是描述性的图形查询语言,语法简单,功能强大,由于Neo4j在图形数据库家族中处于绝对领先的地位,拥有众多的用户基数,使得Cypher成为图形查询语言的事实上的标准。本文作为入门级的教程,我不会试图分析Cypher语言的全部内容,本文的目标是循序渐进地使用Cypher语言执行简单的CRUD操作,为了便于演示,本文在Neo4j Browser中执行Cypher示例代码。以下图形包含三个节点和两个关系,本文会一步一步讲解如何利用Cypher语言创建以下图形。 我的Neo4j系列的文章收录在: Neo4j 一,easy,热热身 和SQL很相似,Cypher语言的关键字不区分大小写,但是属性值,标签,关系类型和变量是区分大小写的。 1,变量(Variable) 变量用于对搜索模式的部分进行命名,并在同一个查询中引用,在小括号()中命名变量, 变量名是区分大小写的 ,示例代码创建了两个变量:n和b,通过return子句返回变量b; MATCH (n)-->(b) RETURN b 在Cypher查询中,变量用于引用搜索模式(Pattern),但是变量不是必需的,如果不需要引用,那么可以忽略变量。 2,访问属性 在Cypher查询中

Neo4j 查询语法入门

天涯浪子 提交于 2019-12-08 05:10:16
一:Node语法 在cypher里面通过用一对小括号()表示一个节点,它在cypher里面查询形式如下: 1,() 代表匹配任意一个节点 2, (node1) 代表匹配任意一个节点,并给它起了一个别名 3, (:Lable) 代表查询一个类型的数据 4, (person:Lable) 代表查询一个类型的数据,并给它起了一个别名 5, (person:Lable {name:"小王"}) 查询某个类型下,节点属性满足某个值的数据 6, (person:Lable {name:"小王",age:23}) 节点的属性可以同时存在多个,是一个AND的关系 二:关系语法 关系用一对-组成,关系分有方向的进和出,如果是无方向就是进和出都查询 1,--> 指向一个节点 2,-[role]-> 给关系加个别名 3,-[:acted_in]-> 访问某一类关系 4,-[role:acted_in]-> 访问某一类关系,并加了别名 5,-[role:acted_in {roles:["neo","hadoop"]}]-> 访问某一类关系下的某个属性的关系的数据 三:模式语法 模式语法是节点和关系查询语法的结合,通过模式语法我们可以进行我们想要的任意复杂的查询 (p1: Person:Actor {name:"tom"})-[role:acted_in {roles:["neo","actor"]}]-

图形数据库、NOSQL和Neo4j

 ̄綄美尐妖づ 提交于 2019-12-08 05:06:40
简介 在 众多不同的数据模型 里,关系数据模型自80年代就处于统治地位,而且有不少实现,如 Oracle 、 MySQL 和 MSSQL ,它们也被称为关系数据库管理系统(RDBMS)。然而,最近随着关系数据库使用案例的不断增加,一些问题也暴露了出来,这主要是因为两个原因: 数据建模中的一些缺陷和问题 ,以及在大数据量和多服务器之上进行水平伸缩的限制。两个趋势让这些问题引起了全球软件社区的重视: 在应对这些趋势时,关系数据库产生了更多的问题。这导致大量解决这些问题某些特定方面的不同技术的出现,它们可以与现有RDBMS相互配合或代替它们 - 亦被称为 混合持久化(Polyglot Persistence) 。数据库替代品并不是新鲜事物,它们已经以 对象数据库(OODBMS) 、层次数据库(如LDAP)等形式存在很长时间了。但是,过去几年间,出现了大量新项目,它们被统称为NOSQL数据库(NOSQL-databases)用户、系统和传感器产生的数据量呈 指数增长 ,其增长速度因大部分数据量集中在象Amazon、Google和其他云服务这样的分布式系统上而进一步加快。 数据内部依赖和复杂度的增加,这一问题因互联网、Web2.0、社交网络,以及对大量不同系统的数据源开放和标准化的访问而加剧。 本文旨在介绍图形数据库(Graph Database)在NOSQL运动里的地位

linux环境搭建图数据库neo4j

本小妞迷上赌 提交于 2019-12-08 05:05:47
Neo4j(Nosql之一)是一个高性能的图数据库(不支持分布式), 在社交关系中经常用到。关于Neo4j的介绍,网上多的是, 故不再赘述。来简要说说安装: 1. 安装jdk, 不多说: ubuntu@VM-0-15-ubuntu:~$ java -version openjdk version "1.8.0_151" OpenJDK Runtime Environment (build 1.8.0_151-8u151-b12-0ubuntu0.16.04.2-b12) OpenJDK 64-Bit Server VM (build 25.151-b12, mixed mode) 2. 从官网下载并解压neo4j(社区版), 如下: ubuntu@VM-0-15-ubuntu:~/taoge/neo4j_db$ ll total 77504 drwxrwxr-x 3 ubuntu ubuntu 4096 Feb 1 18:20 ./ drwxrwxr-x 8 ubuntu ubuntu 4096 Feb 2 14:56 ../ drwxr-xr-x 11 ubuntu ubuntu 4096 Feb 1 18:21 neo4j-community-3.2.9/ -rw-r--r-- 1 ubuntu ubuntu 79268344 Feb 1 18:17 neo4j

NEO4J与SpringBoot整合中的一个小坑

萝らか妹 提交于 2019-12-08 05:05:29
刚刚接手了一个微服务的项目,其中一个服务启动报错,项目依赖了一个对neo4j的封装包(引入bolt和http两种操作协议的driver),但该项目本身并为对neo4j进行任何配置。 首先还原一下错误: Caused by: org.neo4j.ogm.exception.ServiceNotFoundException: Could not load driver: null. at org.neo4j.ogm.service.DriverService.load(DriverService.java:57) ~[neo4j-ogm-api-2.1.2.jar:na] at org.neo4j.ogm.service.DriverService.load(DriverService.java:69) ~[neo4j-ogm-api-2.1.2.jar:na] at org.neo4j.ogm.service.Components.loadDriver(Components.java:158) ~[neo4j-ogm-api-2.1.2.jar:na] at org.neo4j.ogm.service.Components.driver(Components.java:104) ~[neo4j-ogm-api-2.1.2.jar:na] at org.neo4j.ogm

Neo4j批量导入数据

这一生的挚爱 提交于 2019-12-08 05:05:10
有接近2G的数据想导入到Neo4j图数据库中,最开始想的是利用python连接数据库,利用Cypher查询语句一条条的进行,但是发现时间消耗非常大,程序越来越慢,数据最终没有导入完成就放弃了。(7电脑*24工作,半个月才导了不到一半的数据) 最后决定采用批量导入(原来没用批量导入是想插入的时候先判断是否存在,事实证明只要设置好ID就行) 参考文章: https://www.jianshu.com/p/32ce953604d5 https://blog.csdn.net/macanv/article/details/78296066 https://blog.csdn.net/sinat_25479505/article/details/80996402 有点累,不详细写,直说我成功的语句: 进入 bin目录下面: ./neo4j-admin import --database graph.db --id-type string --nodes:person E:\Source\pyCharm\CVS\person.csv --relationships:relation E:\Source\pyCharm\CVS\relation.csv 来源: CSDN 作者: 长弓Smile 链接: https://blog.csdn.net/u012485480/article

【Neo4j查询优化系列】在ORDER BY中使用节点属性索引提高排序性能

徘徊边缘 提交于 2019-12-08 05:04:56
在neo4j 3.5 版本中,增加了对ORDER BY的优化,可以通过本地数据库索引(Native Index)提高排序效率。对于有百万或更多节点的集合,排序性能提高会很显著。 在查询中,若要利用这一特性,具体方法如下: 1、为节点属性定义本地索引: CREATE INDEX ON :LABEL(Property) 属性值的类型可以是任何基本类型,但是Point类型除外。 2、在Cypher查询中对建立索引的节点属性显式使用下面任何过滤条件之一: 相等 = 区间:> 或 < STARTS WITH或ENDS WITH 包含:CONTAINS 注意:过滤条件中 必须 包含有类型的 值 ,这样Cypher编译器才会查找是否有数据库索引可以使用。具体例子见下文。 3、在ORDER BY中对建立索引的节点属性进行排序。 如果Cypher编译器能够使用索引对ORDER BY进行优化,那么EXPLAIN时会看到相应的操作符(operator): NodeIndexContainsScan NodeIndexSeekByRange 而不会再看到Sort、Top操作符。 否则,只会看到在内存中排序相关的操作符: Sort Top 例子如下。模型是只包含一种标签Account的节点,其属性有acctid, acctNo, id和ifsc(无索引)。 // 查看已创建的索引 Indexes ON

neo4j安装APOC插件

别来无恙 提交于 2019-12-08 05:04:43
1、APOC下载地址: https://github.com/neo4j-contrib/neo4j-apoc-procedures/releases/3.4.0.1 只要下载.jar这一个压缩文件就好了,将下载好的.jar文件直接放到neo4j安装目录下的plugins文件夹目录下就可以了。不要解压!!!,不要另外新建文件夹。如下图 2、这样插件APOC就已经在neo4j中了,但因为还没有配置APOC的信息,所以neo4j中还扫描不到这个插件。 下面开始配置(其实和windows的配置内容基本一致,只不过windows自动配置了,linux要手动配置)。 找到neo4j安装目录下conf文件夹里的neo4j.conf并打开。 需要去掉注释的部分: 需要在文件末尾加上的文本: 完成配置后,保存文件就可以了。重启neo4j,打开自带的浏览器,输入RETURN apoc.version() 如果可以看见APOC的版本信息,如3.4.0,说明成功安装了该插件。否,则说明未成功。 来源: CSDN 作者: 一尘在心 链接: https://blog.csdn.net/zhanaolu4821/article/details/83855735

neo4j中索引的使用

时光总嘲笑我的痴心妄想 提交于 2019-12-08 05:04:10
neo4j可以对node和relationship中的属性建立索引,索引中的node(relationship)和属性对key-value为多对多的关系。一个node(relationship)可以在某索引中存储多个属性对,一个属性对也可以对应到多个node(relationship)。 代码: Node node1 = graphDb.createNode(); node1.setProperty("name","easypoint"); Node node2 = graphDb.createNode(); node2.setProperty("name","csdn"); nodeIndex.add(node1,"name",node1.getProperty("name")); nodeIndex.add(node1,"name","haha"); nodeIndex.add(node2,"name",node2.getProperty("name")); nodeIndex.add(node2,"name","haha"); for(Node node :nodeIndex.get("name","haha")){ System.out.println(node.getProperty("name")); } 结果: easypoint csdn 在neo4j中