古道长亭

Contact me with ixiaoqiang0011@gmail.com


  • 首页

  • 归档

  • 分类

  • 关于

  • Book

  • 搜索

Neo4j-CQL高级

时间: 2023-05-03   |   分类: Neo4j   | 字数: 1796 字 | 阅读约: 4分钟 | 阅读次数:

Neo4j-CQL高级

1. CQL函数

1.1 字符串函数

MATCH (p:Person) RETURN ID(p),LOWER(p.character)
match(p:Person) 
return p.character,lower(p.character),p.name,substring(p.name,2),replace(p.name,"子","zi")

1.2 聚合函数

MATCH (p:Person) 
RETURN MAX(p.money),SUM(p.money)

1.3 关系函数

match p = (:Person {name:"林婉儿"})-[r:Couple]-(:Person) 
RETURN STARTNODE(r)

1.4 shortestPath函数返回最短的path

MATCH p=shortestPath( (node1)-[*]-(node2) ) RETURN length(p), nodes(p)
MATCH p=shortestPath((person:Person {name:"王启年"})-[*]-(person2:Person {name:"九品射手燕小乙"}) ) RETURN length(p), nodes(p)

2. CQL多深度关系节点

2.1 使用with关键字

查询三层级关系节点如下:with可以将前面查询结果作为后面查询条件

示例:

match (na:Person)-[re]->(nb:Person) where na.name="范闲" WITH na,re,nb 
match (nb:Person)-[re2]->(nc:Person) return na,re,nb,re2,nc

match (na:Person)-[re]->(nb:Person) where na.name="林婉儿" WITH na,re,nb 
match (nb:Person)-[re2]->(nc:Person) return na,re,nb,re2,nc

match (na:Person)-[re]-(nb:Person) where na.name="林婉儿" WITH na,re,nb 
match (nb:Person)-[re2]->(nc:Person) return na,re,nb,re2,nc

match (na:Person)-[re]-(nb:Person) where na.name="林婉儿" WITH na,re,nb 
match (nb:Person)-[re2:Friends]->(nc:Person) return na,re,nb,re2,nc

2.2 直接拼接关系节点查询

match (na:Person{name:"范闲"})-[re]->(nb:Person)-[re2]->(nc:Person) return na,re,nb,re2,nc
-- 为了方便,可以将查询结果赋给变量,然后返回
match data=(na:Person{name:"范闲"})-[re]->(nb:Person)-[re2]->(nc:Person) return data

2.3 使用深度运算符

当实现多深度关系节点查询时,显然使用以上方式比较繁琐。

可变数量的关系,节点可以使用-[:TYPE*minHops..maxHops]-。

如:

match data=(na:Person{name:"范闲"})-[*1..2]-(nb:Person) return data

3.事务

为了保持数据的完整性和保证良好的事务行为,Neo4j也支持ACID特性

  • 所有对Neo4j数据库的数据修改操作都必须封装在事务里。

  • 默认的isolation level是READ_COMMITTED。

  • 死锁保护已经内置到核心事务管理 。 (Neo4j会在死锁发生之前检测死锁并抛出异常。在异常抛出之 前,事务会被标志为回滚。当事务结束时,事务会释放它所持有的锁,则该事务的锁所引起的死锁也就是解除,其他事务就可以继续执行。当用户需要时,抛出异常的事务可以尝试重新执行)

  • 除特别说明,Neo4j的API的操作都是线程安全的,Neo4j数据库的操作也就没有必要使用外部的同步方法。

4. 索引

  • 简介

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

  • 创建单一索引

    CREATE INDEX ON :Label(property)
    例如:
    CREATE INDEX ON :Person(name)
    
  • 创建复合索引

    CREATE INDEX ON :Person(age,gender)
    
  • 全文索引模式

    之前的常规模式索引只能对字符串进行精确匹配或者前后缀索引(startswith,endswith,contains),全文索引将标记化索引字符串值,因此它可以匹配字符串中任何位置的术语。索引字符串如何被标记化并分解为术语,取决于配置全文模式索引的分析器。索引是通过属性来创建,便于快速查找节点或者关系。

    创建和配置全文模式索引

    使用db.index.fulltext.createNodeIndex和db.index.fulltext.createRelationshipIndex创建全文模式索引。在创建索引时,每个索引必须为每个索引指定一个唯一的名称,用于在查询或删除索引时引用相关的特定索引。然后,全文模式索引分别应用于标签列表或关系类型列表,分别用于节点和关系索引,然后应用于属性名称列表。

    call db.index.fulltext.createNodeIndex("索引名",[Label,Label],[属性,属性]) 
    call db.index.fulltext.createNodeIndex("nameAndDescription",["Person"],["name", "description"])
    
    call db.index.fulltext.queryNodes("nameAndDescription", "范闲") YIELD node, score 
    RETURN node.name, node.description, score
    
  • 查看和删除索引

    call db.indexes 或者 :schema
    DROP INDEX ON :Person(name)
    DROP INDEX ON :Person(age, gender)
    call db.index.fulltext.drop("nameAndDescription")
    

5. 约束

  • 唯一性约束

    • 避免重复记录。
    • 强制执行数据完整性规则
    CREATE CONSTRAINT ON (变量:<label_name>) ASSERT 变量.<property_name> IS UNIQUE
    例:
    CREATE CONSTRAINT ON (person:Person) ASSERT person.name IS UNIQUE
    
    删除:
    DROP CONSTRAINT ON (cc:Person) ASSERT cc.name IS UNIQUE
    
  • 属性存在约束(企业版功能)

    CREATE CONSTRAINT ON (p:Person) ASSERT exists(p.name)
    
  • 查看约束

    call db.constraints
    
    :schema
    
#Neo4j# #图#
QQ扫一扫交流

标题:Neo4j-CQL高级

作者:古道长亭

声明: 欢迎加群交流!

如有帮助,欢迎多多交流 ^_^

微信打赏

支付宝打赏

Neo4j备份和优化
Neo4j-CQL
  • 文章目录
  • 站点概览
古道长亭

古道长亭

Always remember that your present situation is not your final destination. The best is yet to come.

226 日志
57 分类
104 标签
GitHub Gitee
友情链接
  • 古道长亭的BOOK
  • JAVA学习
标签云
  • Mysql
  • 搜索引擎
  • Mybatis
  • 容器
  • 架构
  • 消息队列
  • Flink
  • Sharding sphere
  • 流处理
  • 缓存
  • 1. CQL函数
    • 1.1 字符串函数
    • 1.2 聚合函数
    • 1.3 关系函数
    • 1.4 shortestPath函数返回最短的path
  • 2. CQL多深度关系节点
    • 2.1 使用with关键字
    • 2.2 直接拼接关系节点查询
    • 2.3 使用深度运算符
  • 3.事务
  • 4. 索引
  • 5. 约束
© 2019 - 2024 京ICP备19012088号-1
0%