注:2019-08-21,打算做一个KG-task-oriented-dialogue-systrm【自创名词··]
官档链接
友情提示:花钱买韭菜教程,不如看看文档~~ ??
neo4j数据基本结构
Node,Relationship,下图每个小圆代表一个node,线表示relation
Node Variables(节点变量)
跟大多编程语言的变量名类似,一般是缩写或者开头字母,方便后面的查询语句查找。比如用 p 代表 person节点,t代表technology节点,下图为Cypher示例
Node Label(节点标签)
比如人的标签,你可把他们全部归类为person标签(贾宝玉,林黛玉,史湘云,宋小宝这些当然没必要全部分为不同的node,归结为person标签,然后人名作为他们各自的属性),上图中就是 person, technology, company
Relationships direction(关系指向)
在上图的例子中就包含 LIKES, IS_FRIENDS_WITH, WORKS_FOR这三种关系 ,
Cypher表示:[:LIKES];[:IS_FRIENDS_WITH];[:WORKS_FOR]
在图论里面有向图无向图是基本结构,在Cypher中直接用 --表示无向,–> / <-- 表示有向。随之而来的查询问题,如果你不知道图数据中的方向是怎么样的,在查询语句中就不要带箭头最为保险,否则可能会不返回任何结果。如下图
【bidirection:双向,unidirection:单向】
Relationship Variables(关系变量)
和 node variables类似,设置变量名方便后面查询时候用到,如果不需要就直接使用短划线箭头符号即可,
你可以使用 -[rel]->或者 -[rel:LIKES]-> 来构建关系,并在稍后的查询语句中使用rel这个变量来应用这些关系及其详细信息
注意:一个指定关系类型时名称前需要加引号的,如果不加引号就代表关系变量,这个时候查询的话,就会查询这个变量的所有类型
Node or Relationship Properties(节点及关系的属性)
属性的表示方式是 name-value,用花括号创建。以上图为例,nodel的属性有name,
relationship有since属性,创建方式如下
具体的例子
1,表示Jennifer likes Graphs
creat(p:Person {name: "Jennifer"})-[rel:LIKES]->(g:Technology {type: "Graphs"})
问题:
1,用上述方法create搭建node之间的关系的时候,如果node已存在,它还会再创建一个相同的节点,造成冗余,应该会用到除create的其他key words