首先简单介绍下Neo4j,Neo4j是一个高性能的NOSQL图形数据库,它将结构化数据存储在网络上而不是表中,它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎,但是它将结构化数据存储在网络(从数学角度叫做图)而不是表中。Neo4j也可以被看做是一个高性能的图引擎,该引擎具有成熟数据库的所有特性。
Neo4j中涉及到几个关键的实体对象,分别是Node(节点)、Relationship(关系)、Path(路径)、Direction(关系方向)、RelationshipType(关系类型)。朋友们可以将Relationship(关系)看做是连接线,一条连接线每端只能连接一个Node(节点),并且连接线两端必须同时都连接有Node(节点);Relationship(关系)具有方向和类型特性。Node(节点)可以通过多Relationship(关系)与其他多个Node(节点)关联,而且Node(节点)也可以是没有任何连接的孤立节点。Path(路径)包含多个Node和Relationship,是节点和关系的集合。下图就是笔者本人利用Neo4j构建的一个“射雕英雄谱”局部关系图:
3.1. Neo4j数据分页检索类型
Neo4j数据分页检索接口采用自身的Cypher检索语句,通过构建Cypher分页检索语句,实现分页处理。
Neo4j数据库中不存在传统的表的概念,一个数据库可以视作一张图。数据分页检索将针对Node和Relationship分别进行,不针对Path进行分页检索,因为基本上没有什么意义。按照检索条件区分检索类型,可以细分为以下几种。
3.1.1 Node(节点)分页检索
1) 无条件检索Cypher语句
--不根据属性排序 START n=node(*) RETURN n SKIP 0 LIMIT 20 --根据属性排序 START n=node(*) RETURN n ORDER BY n.NAME DESC SKIP 0 LIMIT 20
2) 根据Property属性检索Cypher语句
--根据属性NAME值进行模糊检索 START n=node(*) WHERE n.NAME=~'.*tom*' RETURN n SKIP 0 LIMIT 20 --根据属性NAME值进行精确检索 START n=node(*) WHERE n.NAME='tom' RETURN n SKIP 0 LIMIT 20
3) 根据Index索引检索Cypher语句
--说明:N_INDEX为索引名称,USER_NAME为索引Key名称 --根据索引值进行模糊检索 --模糊检索的多种格式。 --1、*tom*表示USER_NAME中包含tom字符串的 --2、*tom表示USER_NAME右侧匹配tom字符串的 --3、tom*表示USER_NAME左侧匹配tom字符串的 START n=node:N_INDEX('USER_NAME:*tom*') RETURN n SKIP 0 LIMIT 20 --根据索引值进行精确检索 START n=node:N_INDEX (USER_NAME='tom') RETURN n SKIP 0 LIMIT 20
4) 根据Index索引和Property属性检索Cypher语句
--根据索引(模糊)和属性(模糊)检索 START n=node:N_INDEX('USER_NAME:*tom*') WHERE n.USER_TYPE=~'.*sys*' RETURN n SKIP 0 LIMIT 20 --根据索引(模糊)和属性(精确)检索 START n=node:N_INDEX('USER_NAME:*tom*') WHERE n.USER_TYPE ='system' RETURN n SKIP 0 LIMIT 20 --根据索引(精确)和属性(模糊)检索 START n=node:N_INDEX(USER_NAME='tom') WHERE n.USER_TYPE=~'.*sys*' RETURN n SKIP 0 LIMIT 20 --根据索引(精确)和属性(精确)检索 START n=node:N_INDEX(USER_NAME='tom') WHERE n.USER_TYPE =