neo4j

转载https://blog.csdn.net/vivian_ll/article/details/89312526
原文

W3Cschool-neo4j教程(推荐)
Neo4j官方教程(推荐)
Neo4j概述
win10 下安装 neo4j
Neo4j安装&入门&一些优缺点
基于电影知识图谱的智能问答系统(二) – Neo4j导入CSV文件(系列文章,很全,java+spark)

Neo4j属性图数据模型
Neo4j图数据库遵循属性图模型来存储和管理其数据。

属性图模型规则
 1.表示节点,关系和属性中的数据
 2.节点和关系都包含属性
 3.关系连接节点
 4.属性是键值对
 5.节点用圆圈表示,关系用方向键表示。
 6.关系具有方向:单向和双向。
 7.每个关系包含“开始节点”或“从节点”和“到节点”或“结束节点”

在Neo4j中,关系也应该是有方向性的。如果我们尝试创建没有方向的关系,那么Neo4j会抛出一个错误消息。

Neo4j图数据库将其所有数据存储在节点和关系中。我们不需要任何额外的RDBMS数据库或无SQL数据库来存储Neo4j数据库数据。它以图形的形式存储其数据的本机格式。

Neo4j使用本机GPE(图形处理引擎)引擎来使用它的本机图存储格式。

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

  • 节点

  • 关系

  • 属性

  • 标签

  • 数据浏览器

一.Neo4j 中节点名称和节点标签到底是什么关系?
CREATE (p:学生{name:“小红”})

CREATE (p:学生{name:“小明”})

CREATE (p:学生{name:“小黄”})

Neo4j中的节点标签,基本等同于关系数据库中的table表名,或者说是一个类别。但是跟table不同的是,这里节点很方便的有多个标签: (n:Person :User)

问题中的CREATE (p:学生{name:“小红”})中的p只是在这个命令中的一个变量而已,命令执行完了之后,就没用了,所以后续就无法用它访问节点了。而可以用label做match访问。

转载
https://www.zhihu.com/question/271886497
在这里插入图片描述
<节点名称>我们不能用它来访问节点的详细信息。(临时变量,类的一个实例)

<标签名称>我们应该利用这个标签名称访问节点的详细信息。(一个类)

Label将一个公共名称与一组节点或关系相关联。 节点或关系可以包含一个或多个标签。 我们可以为现有节点或关系创建新标签。 我们可以从现有节点或关系中删除现有标签。

标签为类型,节点名称具体哪一个节点

二.Neo4j的CQL MATCH + RETURN命令用于 -
在Neo4j的CQL,我们不能用MATCH或RETURN单独命令,所以我们要结合这两个命令来检索数据库中的数据。

要检索节点的一些特性
要检索节点的所有属性
要检索节点和关联关系的一些性质
要检索节点和关联关系的所有属性

node和relationship返回的是node->name。创建先node->name,再label-name
relationship返回的是label-name。创建先label->name,再node->name
match先node->name,再label->name

CREATE (
   <node-name>:<label-name>
   {    
      <Property1-name>:<Property1-Value>
      ........
      <Propertyn-name>:<Propertyn-Value>
   }
)
return node->name

CREATE (dept:Dept { deptno:10,dname:“Accounting”,location:“Hyderabad” })

MATCH (dept: Dept)
RETURN dept.deptno,dept.dname

MATCH (dept: Dept)
RETURN dept

三.创建节点之间的关系
我们可以使用CQL CREATE命令为节点或关系创建单个标签,并为节点创建多个标签。 这意味着Neo4j仅支持两个节点之间的单个关系类型。

注意,这儿是先关系标签,然后是关系名称。

MATCH (<node1-name>:<node1-label-name>),(<node2-name>:<node2-label-name>)
CREATE  
	(<node1-name>)-[<relationship-name>:<relationship-label-name>{<define-properties-list>}]->(<node2-name>)
RETURN <relationship-name>
CREATE (e:Customer{id:"1001",name:"Abc",dob:"01/10/1982"})
CREATE (cc:CreditCard{id:"5001",number:"1234567890",cvv:"888",expiredate:"20/17"})

MATCH (e:Customer),(cc:CreditCard) 
CREATE (e)-[r:DO_SHOPPING_WITH ]->(cc) 

查看关系

MATCH (e)-[r:DO_SHOPPING_WITH ]->(cc) 
RETURN r     

查看关系节点的详细信息

MATCH (e)-[r:DO_SHOPPING_WITH ]->(cc) 
RETURN e,cc    

四.where子句

WHERE <condition> <boolean-operator> <condition>

布尔运算符:AND,OR,NOT,XOR
比较运算符:=,<>,<,>,<=,>=

五.DELETE删除
删除节点

DELETE <node-name-list>

删除节点及相关节点和关系。

DELETE <node1-name>,<node2-name>,<relationship-name>

六.REMOVE删除
删除节点或关系的标签、属性。

删除节点或关系的属性

REMOVE <property-name-list>

property-name-list:<属性名称列表>语法

<node-name>.<property1-name>,
<node-name>.<property2-name>, 
.... 
<node-name>.<propertyn-name> 

node-name它是节点的名称。
property-name它是节点的属性名称。

删除节点或关系的标签

REMOVE <label-name-list> 

label-name-list语法

<node-name>:<label2-name>, 
.... 
<node-name>:<labeln-name> 

Neo4j CQL DELETE和REMOVE命令之间的主要区别
DELETE操作用于删除节点和关联关系。
REMOVE操作用于删除标签和属性。

七.SET子句

  • 向现有节点或关系添加新属性。
  • 添加或更新属性值
SET  <property-name-list>

八.ORDER BY子句
Neo4j CQL在MATCH命令中提供了“ORDER BY”子句,对MATCH查询返回的结果进行排序。
我们可以按升序或降序对行进行排序。
默认情况下,它按升序对行进行排序。 如果我们要按降序对它们进行排序,我们需要使用DESC子句。

ORDER BY  <property-name-list>  [DESC]	 

九.UNION合并

  • UNION子句
    它将两组结果中的公共行组合并返回到一组结果中。 它不从两个节点返回重复的行。

    限制:
    结果列类型和来自两组结果的名称必须匹配,两组查询列名称应该相同,列的数据类型应该相同。

            <MATCH Command1>
              UNION
            <MATCH Command2>
MATCH (cc:CreditCard)
RETURN cc.id as id,cc.number as number
UNION
MATCH (dc:DebitCard)
RETURN dc.id as id,dc.number as number

这表明,这两个查询应具有相同的列名。

首先查询有:cc.id,cc.number。

第二个查询有:dc.id,dc.number。

这里既有信用卡式和借记卡具有相同的属性名:身份证和号码,但他们有不同的节点名称前缀。这就是为什么UNION命令显示此错误消息。为了避免这种错误,Neo4j的CQL提供“AS”子句。

像CQL,CQL Neo4j的“AS”子句用于给一些别名。

  • UNION ALL子句
    它结合并返回两个结果集的所有行成一个单一的结果集。它还返回由两个节点重复行。(不过滤重复行)

    限制:
    结果列类型,并从两个结果集的名字必须匹配,这意味着列名称应该是相同的,列的数据类型应该是相同的

            <MATCH Command1>
            UNION ALL
            <MATCH Command2>

十.LIMIT和SKIP子句
Neo4j CQL已提供“LIMIT”子句来过滤或限制查询返回的行数。 它修剪CQL查询结果集底部的结果。
使用CQL LIMIT子句减少MATCH + RETURN查询返回的记录数。

LIMIT <number>

如果我们要修整CQL查询结果集顶部的结果,那么我们应该使用CQL SKIP子句。

SKIP <number>

eg:skip = 2代表跳过两个节点

十二.MERGE命令

  • 创建节点,关系和属性
  • 为从数据库检索数据
      MERGE = CREATE + MATCH

Neo4j CQL MERGE命令在图中搜索给定模式,如果存在,则返回结果。如果它不存在于图中,则它创建新的节点/关系并返回结果。

MERGE (<node-name>:<label-name>
{
   <Property1-name>:<Property1-Value>,
   .....
   <Propertyn-name>:<Propertyn-Value>
})


CREATE命令总是向数据库添加新的节点。

MERGE命令检查该节点在数据库中是否可用。 如果它不存在,它创建新节点。 否则,它不创建新的。

十三.NULL值
Neo4j CQL将空值视为对节点或关系的属性的缺失值或未定义值。

MATCH (e:Employee) 
WHERE e.id IS NULL       //使用WHERE子句来检查ID值是否为NULL。
RETURN e.id,e.name,e.sal,e.deptno

十四.IN操作符

IN[<Collection-of-values>]
MATCH (e:Employee) 
WHERE e.id IN [123,124]
RETURN e.id,e.name,e.sal,e.deptno

十五. ID属性
“Id”是节点和关系的默认内部属性。 这意味着,当我们创建一个新的节点或关系时,Neo4j数据库服务器将为内部使用分配一个数字。 它会自动递增。

十六.Caption标题

十七.方向关系
在Neo4j中,两个节点之间的关系是有方向性的。 它们是单向或双向的。

CREATE (<node1-details>)-[<relationship-details>]->(<node2-details>)

这里 -
node1-details是“From Node”节点详细信息
node2-details是“到节点”节点详细信息在这里插入代码片
relationship-details是关系详细信息

如果我们观察上面的语法,它使用一个箭头标记:() - []→()。 它表示从左侧节点到右侧节点的方向。

十八.字符串函数

UPPER	它用于将所有字母更改为大写字母。
LOWER	它用于将所有字母改为小写字母。
SUBSTRING	它用于获取给定String的子字符串。
REPLACE	它用于替换一个字符串的子字符串。
UPPER (<input-string>)

input-string可以是来自Neo4j数据库的节点或关系的属性名称。

SUBSTRING(<input-string>,<startIndex> ,<endIndex>)

它接受一个字符串作为输入和两个索引:一个是索引的开始,另一个是索引的结束,并返回从StartIndex到EndIndex-1的子字符串。

十九.AGGREGATION聚合
使用MATCH命令中的RETURN +聚合函数来处理一组节点并返回一些聚合值。

COUNT	它返回由MATCH命令返回的行数。
MAX	它从MATCH命令返回的一组行返回最大值。
MIN	它返回由MATCH命令返回的一组行的最小值。
SUM	它返回由MATCH命令返回的所有行的求和值。
AVG	它返回由MATCH命令返回的所有行的平均值。
COUNT(<value>)

二十.关系函数

STARTNODE	它用于知道关系的开始节点。
ENDNODE	它用于知道关系的结束节点。
ID	它用于知道关系的ID。
TYPE	它用于知道字符串表示中的一个关系的TYPE。

STARTNODE和ENDNODE
它需要一个字符串作为输入并为大写格式, 所有CQL函数应使用“()”括号。

STARTNODE (<relationship-label-name>)
ENDNODE (<relationship-label-name>)
MATCH (a)-[movie:ACTION_MOVIES]->(b) 
RETURN STARTNODE(movie)

ID和TYPE
ID和TYPE关系函数来检索关系的Id和类型详细信息。

MATCH (a)-[movie:ACTION_MOVIES]->(b) 
RETURN ID(movie),TYPE(movie)

二十一.数据库备份和恢复link
在实时应用程序中,我们应定期备份应用程序数据库,以便在任何故障点恢复到某种工作状态。
加粗样式规则适用于RDBMS和无SQL数据库。

如何备份Neo4j数据库
如何将Neo4j数据库还原到特定的备份

二十二.索引
Neo4j SQL支持节点或关系属性上的索引,以提高应用程序的性能。
我们可以为具有相同标签名称的所有节点的属性创建索引。
我们可以在MATCH或WHERE或IN运算符上使用这些索引列来改进CQL Command的执行。

Create Index 创建索引

CREATE INDEX ON :<label_name> (<property_name>)

Drop Index 丢弃索引
DROP INDEX”命令删除NODE或Relationship的属性的现有索引。

DROP INDEX ON :<label_name> (<property_name>)

二十三.UNIQUE约束

UNIQUE约束的优点
 - 避免重复记录。
 - 强制执行数据完整性规则。

(1)Neo4j CQL已提供“CREATE CONSTRAINT”命令,以在NODE或关系的属性上创建约束。

创建UNIQUE(唯一)约束

CREATE CONSTRAINT ON (<label_name>)
ASSERT <property_name> IS UNIQUE
CREATE CONSTRAINT ON (cc:CreditCard)
ASSERT cc.number IS UNIQUE

(2)Neo4j CQL提供了“DROP CONSTRAINT”命令,以从NODE或Relationship的属性中删除现有的Un约束。
删除UNIQUE约束

DROP CONSTRAINT ON (<label_name>)
ASSERT <property_name> IS UNIQUE
DROP CONSTRAINT ON (cc:CreditCard)
ASSERT cc.number IS UNIQUE
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Graph Algorithms: Practical Examples in Apache Spark and Neo4j By 作者: Mark Needham – Amy E. Hodler ISBN-10 书号: 1492047686 ISBN-13 书号: 9781492047681 Edition 版本: 1 出版日期: 2019-01-04 pages 页数: (217) Discover how graph algorithms can help you leverage the relationships within your data to develop more intelligent solutions and enhance your machine learning models. You’ll learn how graph analytics are uniquely suited to unfold complex structures and reveal difficult-to-find patterns lurking in your data. Whether you are trying to build dynamic network models or forecast real-world behavior, this book illustrates how graph algorithms deliver value—from finding vulnerabilities and bottlenecks to detecting communities and improving machine learning predictions. This practical book walks you through hands-on examples of how to use graph algorithms in Apache Spark and Neo4j—two of the most common choices for graph analytics. Also included: sample code and tips for over 20 practical graph algorithms that cover optimal pathfinding, importance through centrality, and community detection. Learn how graph analytics vary from conventional statistical analysis Understand how classic graph algorithms work, and how they are applied Get guidance on which algorithms to use for different types of questions Explore algorithm examples with working code and sample datasets from Spark and Neo4j See how connected feature extraction can increase machine learning accuracy and precision Walk through creating an ML workflow for link prediction combining Neo4j and Spark

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值