一,创建节点

插入
下面的Cypher查询创建一个节点,标签是Person,具有两个属性name和born,通过RETURN子句,返回新建的节点
create (n:Person { name: ‘Tom Hanks’, born: 1956 }) return n;

二,查询节点

1.查询born属性小于1955的节点

match(n) where n.born<1955 return n;

三,创建关系

1.创建没有任何属性的关系

MATCH (a:Person),(b:Movie)
WHERE a.name = ‘Robert Zemeckis’ AND b.title = ‘Forrest Gump’
CREATE (a)-[r:DIRECTED]->(b)
RETURN r;

2.创建关系,并设置关系的属性

MATCH (a:Person),(b:Movie)
WHERE a.name = ‘Tom Hanks’ AND b.title = ‘Forrest Gump’
CREATE (a)-[r:ACTED_IN { roles:[‘Forrest’] }]->(b)
RETURN r;

四,查询关系

1.查询跟指定节点有关系的节点,与电影节点(m)相关的节点n有哪些

match(n)—(m:Movie)
return n;

2.查询有向关系的节点

MATCH (:Person { name: ‘Tom Hanks’ })—>(movie)
RETURN movie;
返回Tom Hanks演的电影节点

3.为关系命名,通过[r]为关系定义一个变量名,通过函数type获取关系的类型

MATCH (:Person { name: ‘Tom Hanks’ })-[r]->(movie)
RETURN r,type(r);
结果:
返回Tom Hanks 在电影节点中的扮演角色属性等(r:关系的所有属性),及和电影关系的名称(type(r):关系的名称)

4.查询特定的关系类型,通过[Variable:RelationshipType{Key:Value}]指定关系的类型和属性

MATCH (:Person { name: ‘Tom Hanks’ })-[r:ACTED_IN{roles:’Forrest’}]->(movie)
RETURN r,type(r);
和上述查询结果相同

五,更新图形

set子句,用于对更新节点的标签和实体的属性;remove子句用于移除实体的属性和节点的标签;

1、创建一个完整的Path

由于Path是由节点和关系构成的,当路径中的关系或节点不存在时,Neo4j会自动创建;
CREATE p =(vic:Worker:Person{ name:’vic’,title:”Developer” })-[:WORKS_AT]->(neo)<-[:WORKS_AT]-(michael:Worker:Person { name: ‘Michael’,title:”Manager” })
RETURN p
结果:Cypher语法解析 - 图1
变量neo代表的节点没有任何属性,但是,其有一个ID值,通过ID值为该节点设置属性和标签

2、为节点增加属性

match (n)
where id(n)=7
set n.name = ‘neo’
return n;

3、为节点增加标签

match (n)
where id(n)=7
set n:Company
return n;

六,跟实体相关的函数

跟实体相关的函数,主要是获取节点或关系的ID,关系类型,标签和属性等函数。

1、通过id函数,返回节点或关系的ID

MATCH (:Person { name: ‘Oliver Stone’ })-[r]->(movie)
RETURN id(r);

2、通过type函数,查询关系的类型

MATCH (:Person { name: ‘Oliver Stone’ })-[r]->(movie)
RETURN type(r);

3、通过lables函数,查询节点的标签

MATCH (:Person { name: ‘Oliver Stone’ })-[r]->(movie)
RETURN lables(movie);

4、通过keys函数,查看节点或关系的属性键

MATCH (a)
WHERE a.name = ‘Alice’
RETURN keys(a)

5、通过properties()函数,查看节点或关系的属性

CREATE (p:Person { name: ‘Stefan’, city: ‘Berlin’ })
RETURN properties(p)

七,模式

模式,用于描述如何搜索数据,模式的格式是:使用()标识节点,使用[]标识关系,为了更有效地使用Cypher查询,必须深入理解模式。

1、节点模式

节点具有标签和属性,Cypher为了引用节点,需要给节点命名:

  • (n) :该模式用于描述节点,节点的变量名是n;匿名节点是();
  • (n:lable):该模式用于描述节点,节点具有特定的标签lable;也可以指定多个标签;
  • (n{name:”Vic”}):该模式用于描述节点,节点具有name属性,并且name属性值是“Vic”;也可以指定多个属性;
  • (n:lablle{name:”Vic”}):该模式用于描述节点,节点具有特定的标签和name属性,并且name属性值是“Vic”;

    2、关系模式

    在属性图中,节点之间存在关系,关系通过[]表示,节点之间的关系通过箭头()-[]->()表示,例如:

  • [r]:该模式用于描述关系,关系的变量名是r;匿名关系是[]

  • [r:type]:该模式用于描述关系,关系类型是type;每一个关系必须有且仅有一个类型;
  • [r:type{name:”Friend”}]:该模式用于描述关系,关系的类型是type,关系具有属性name,并且name属性值是“Friend”;

    3、关联节点模式

    节点之间通过关系联系在一下,由于关系具有方向性,因此,—>表示存在有向的关系,—表示存在关联,不指定关系的方向,例如:

  • (a)-[r]->(b) :该模式用于描述节点a和b之间存在有向的关系r,

  • (a)—>(b):该模式用于描述a和b之间存在有向关系;

    4、变长路径的模式

    从一个节点,通过直接关系,连接到另外一个节点,这个过程叫遍历,经过的节点和关系的组合叫做路径(Path),路径是由节点和关系的有序组合。

  • (a)—>(b):是步长为1的路径,节点a和b之间有关系直接关联;

  • (a)—>()—>(b):是步长为2的路径,从节点a,经过两个关系和一个节点,到达节点b;

Cypher语言支持变长路径的模式,变长路径的表示方式是:[*N..M],N和M表示路径长度的最小值和最大值。

  • (a)-[*2]->(b):表示路径长度为2,起始节点是a,终止节点是b;
  • (a)-[*3..5]->(b):表示路径长度的最小值是3,最大值是5,起始节点是a,终止节点是b;
  • (a)-[*..5]->(b):表示路径长度的最大值是5,起始节点是a,终止节点是b;
  • (a)-[*3..]->(b):表示路径长度的最小值是3,起始节点是a,终止节点是b;
  • (a)-[*]->(b):表示不限制路径长度,起始节点是a,终止节点是b;

    5、路径变量

    路径可以指定(assign)给一个变量,该变量是路径变量,用于引用查询路径。
    p = (a)-[*3..5]->(b)

    6、示例

    以下示例图有6个节点,每个节点都有一个属性name,节点之间存在关系,关系类型是KNOWS,如图:
    Cypher语法解析 - 图2
    查询模式是:查找跟Filipa有关系的人,路径长度为1或2,查询的结果是:”Dilshad”和”Anders”
    MATCH (me)-[:KNOWS*1..2]-(remote_friend)
    WHERE me.name = ‘Filipa’
    RETURN remote_friend.name

八、索引

索引分内置索引、全文索引(基于Apache Lucene)

1、内置索引

对于标签的的属性添加索引
1.创建索引:
CREATE INDEX ON :Person(name)
组合索引
CREATE INDEX ON :Person(age, country)

2.删除索引:
DROP INDEX ON : Person(name)

2、全文索引:对节点和关系添加索引

创建全文索引:
CALL db.index.fulltext.createNodeIndex(“titlesAndDescriptions”,[“Movie”, “Book”],[“title”, “description”])
对标签为”Movie”, “Book”,属性”title”, “description” 创建名为titlesAndDescriptions 的全文索引

索引使用 属性使用 > 是走索引的,跟 in 也是走索引
在where条件后面,

参考:https://www.cnblogs.com/ljhdo/p/5516793.html

**