赞
踩
CREATE CONSTRAINT ON (book:Book) ASSERT book.isbn IS UNIQUE;
CREATE CONSTRAINT ON (book:Book) ASSERT exists(book.isbn);
CREATE CONSTRAINT ON ()-[like:LIKED]-() ASSERT exists(like.day);
CREATE CONSTRAINT ON (n:Person) ASSERT (n.firstname, n.surname) IS NODE KEY;
节点属性值唯一约束(Unique node property):如果节点具有指定的标签和指定的属性,那么这些节点的属性值是唯一的
节点属性存在约束(Node property existence):创建的节点必须存在标签和指定的属性
关系属性存在约束(Relationship property existence):创建的关系存在类型和指定的属性
节点键约束(Node Key):在指定的标签中的节点中,指定的属性必须存在,并且属性值的组合是唯一的
请注意,属性存在约束只能在 Neo4j 企业版中使用。
graph.run('MATCH (n) OPTIONAL MATCH (n)-[r]->() RETURN count(n.query_address) + count(r.query_address)')
在图形结构中,标签用于对节点进行分组,相当于节点的类型,拥有相同标签的节点属于同一个分组。一个节点可以拥有零个,一个或多个标签,因此,一个节点可以属于多个分组。对分组进行查询,能够缩小查询的节点范围,提高查询的性能。
一个关系仅有一个关系类型。
在查询被索引的属性时,Neo4j自动应用索引,以获得查询性能的提升。
CREATE INDEX ON :Person(firstname)
CREATE INDEX ON :Person(firstname, surname)
4.3 版本以上的 Neo4j 可以在关系上创建索引。
CREATE INDEX [index_name] FOR ()-[r:`[type_name]`]-() ON (r.[property_name]);
指令:schema
Neo4j的模式(Schema)通常是指索引,约束和统计,通过创建模式,Neo4j能够获得查询性能的提升和建模的便利。
# 删除索引
DROP INDEX ON :Album(name);
# 删除约束
DROP CONSTRAINT ON (a:Artist) ASSERT a.name IS UNIQUE
bin/neo4j-admin memrec --memory=内存大小g
让其建议neo4j.conf
的配置# 举例,给图数据库分配 16g 的内存
bin/neo4j-admin memrec --memory=16g
# 获得的建议结果如下
dbms.memory.heap.initial_size=5g
dbms.memory.heap.max_size=5g
dbms.memory.pagecache.size=7g
EXPLAIN:是解释机制,加入该关键字的Cypher语句可以预览执行的过程但并不实际执行,所以也不会产生任何结果
PROFILE:则是画像机制,查询中使用该关键字,不仅能够看到执行计划的详细内容,也可以看到查询的执行结果
# 用于测试查询语句的效率
profile match (n)
where n.name = 'Annie'
return n
from configs.conf import config as conf from py2neo import Graph, Node, Relationship class Neo4j_connection: """function: used to manage Neo4j db operations""" def __init__(self, host, user, password): self.conn = Graph(host=host, user=user, password=password) def create_relative(self): a = Node("Person", name="Alice", age=33) b = Node("Person", name="Bob", age=44) KNOWS = Relationship.type("KNOWS") self.conn.merge(KNOWS(a, b), "Person", "name") if __name__ == '__main__': # connect neo4j g_graph = Neo4j_connection(host=conf.NEO4J_HOST, user=conf.NEO4J_USER, password=conf.NEO4J_PASSWD) g_graph.create_relative()
CREATE (n:Person{Person:'kk'}) return n;
# 未带值的关系
MATCH (n),(m) WHERE n.id ="a" AND m.id = "b" CREATE (n)-[:TO]->(m)
# 带值的关系
MATCH (n),(m) WHERE n.Person ="jj" AND m.Person = "kk" CREATE (n)-[:TO{value: "1"}]->(m)
由于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
MATCH (:Person {id: "a"})-[r:KNOWS]-(:Person {id: "b"})
DELETE r
MATCH (n:Person) WHERE n.name = "a" DETACH DELETE n;
match (n) detach delete n
match (n)
where id(n)=7
set n.name = 'neo'
return n;
match (n)
where id(n)=7
set n:Company
return n;
match (n)<-[r]-(m)
where id(n)=7 and id(m)=8
set r.team='Azure'
return n;
MATCH (n) RETURN n
MATCH ()-[r]->() RETURN r
# LABEL_NAME 为使用时更改值
MATCH (n:LABEL_NAME) RETURN count(n);
# LABEL_NAME 为使用时更改值
MATCH ()-[r:LABEL_NAME]->() RETURN count(r);
sudo docker exec -it [容器 ID] bash
cypher-shell -u [用户名] -p [密码]
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。