当前位置:   article > 正文

neo4j的基本使用_neo4j语法使用

neo4j语法使用

neo4j 基本使用

一、基础语法

1.创建节点:
CREATE (n:Label {name:"L1", type:"T1"})
  • 1
2.查找节点:
MATCH(a:Test) WHERE a.id="1001" RETURN a;	//根据节点属性id进行查询
MATCH(a:Test{id:'1001'}) RETURN a;

MATCH(a:Test) WHERE id(a)="1001" RETURN a;	//根据neo4j自增id进行查询
  • 1
  • 2
  • 3
  • 4
3.创建多个节点和关系:
CREATE (节点1),(节点2),(节点3),(节点1)-[关系1]->(节点2),(节点2)-[关系2]->(节点3)
  • 1
4.模式匹配:

根据关联进行数据查询。

MATCH (a)-[:Have]-(b)-[:Have]-(c)-[:Have]-(d) WHERE a.name="G1" RETURN a,b,c,d;
MATCH (a)-[*..3]-(d) WHERE a.name="G1" return a;

// 查询和 Cloud Atlas 有关的所有人以及关系
MATCH (people:Person)-[relatedTo]-(movie:Movie {title: "Cloud Atlas"}) RETURN people, relatedTo, movie;
// 查询 Kevin Bacon 和其他人的二层联系,关联关系不限
MATCH (bacon:Person {name:"Kevin Bacon"})-[*..2]-(hollywood) RETURN DISTINCT hollywood;
// 查询 Kevin Bacon 与 Meg Ryan 的最短关系
MATCH p=shortestPath((bacon:Person {name:"Kevin Bacon"})-[*]-(meg:Person {name:"Meg Ryan"})) RETURN p;
RETURN nineties.title
//查询 Tom Hanks 演过的电影,关系查询
MATCH (tom:Person {name: "Tom Hanks"})-[:ACTED_IN]->(tomHanksMovies:Movie) RETURN tom,tomHanksMovies
//查询和TOM有关的合作演员
MATCH p=(tom:Person {name:"Tom Hanks"})-[r:ACTED_IN]->(m:Movie)<-[:ACTED_IN]-(coActors:Person) RETURN p
//查询 Kevin Bacon 的四级所有关系
MATCH (bacon:Person {name:"Kevin Bacon"})-[*1..4]-(hollywood) RETURN DISTINCT hollywood
//培根,与梅格·瑞恩关系中最短的一条路径
MATCH p=shortestPath((bacon:Person {name:"Kevin Bacon"})-[*]-(meg:Person {name:"Meg Ryan"})) RETURN p
//既和汤姆·汉克斯演过戏又和汤姆·克鲁斯演过戏的人
MATCH (tom:Person {name:"Tom Hanks"})-[:ACTED_IN]->(m)<-[:ACTED_IN]-(coActors),
  (coActors)-[:ACTED_IN]->(m2)<-[:ACTED_IN]-(cruise:Person {name:"Tom Cruise"})
RETURN tom, m, coActors, m2, cruise
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
5.更新节点(在意有标签中添加新属性):
MATCH(n:Label) WHERE n.name="N2" SET n.update = "2018-06-26" 
  • 1
6.删除节点:
MATCH(n) WHERE ID(n)=100 DELETE n
  • 1
7.查看语句分析:

在查询语句前加上

EXPLAIN 或者 PROFILE
  • 1

二、java原生使用neo4j

1.pom.xml中引入neo4j的jar包:
<!-- 服务器开发需要的jar包 -->
<dependency>
  <groupId>org.neo4j.driver</groupId>
  <artifactId>neo4j-java-driver</artifactId>
  <version>1.5.0</version>
</dependency>

<!-- 嵌入式开发需要的jar包 -->
<dependency>
    <groupId>org.neo4j</groupId>
    <artifactId>neo4j</artifactId>
    <version>3.3.4</version>
</dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
2.实际使用
public static void main(String[] args) {
		// TODO Auto-generated method stub
		Driver driver = GraphDatabase.driver("bolt://127.0.0.1:7687",
				AuthTokens.basic("neo4j", "123456"));
		Session session = driver.session();

		session.run("CREATE (a:Person {name: {name}, title: {title}})",
				parameters("name", "gm", "title", "King"));

		StatementResult result = session.run(
				"MATCH (a:Person) WHERE a.name = {name} "
						+ "RETURN a.name AS name, a.title AS title",
				parameters("name", "gm"));

		while (result.hasNext()) {
			Record record = (Record) result.next();
			System.out.println(record.get("title").asString() + " "
					+ record.get("name").asString());
		}

		session.close();
		driver.close();
	}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

三、springboot集成neo4j

1.pom文件中引入依赖
<dependency>
	<groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-neo4j</artifactId>
 </dependency>
  • 1
  • 2
  • 3
  • 4
2.yml配置

单机配置

spring:
  data:
    neo4j:
      uri: bolt://localhost:7687
      username: neo4j
      password: neo4j
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

集群配置

spring:
	data:
		neo4j:
		    # leader:ip1 follower:ip2 ,ip3
      		uri: bolt://ip1:7687
     	    uris: bolt://ip2:7687,bolt://ip3:7687
      		username: neo4j
            password:neo4j
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
3.创建节点的实体

( 有点类似于Mysql中的table 映射的对象类,mysql中叫做ORM,neo4j中叫做OGM [object graph mapping])

【节点的标签实体】

@NodeEntity(type = "supply")
@Builder
@Data
public class SupplyGraph {
    @GraphId
    private Long nodeId;
    
    @Id
    @GeneratedValue
    @Property(id = "id")
    private Long id;

    /**
     * 供应商名称
     */
    @Property(name = "name")
    private String name;


}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

【关系实体】

# 供应关系(公司节点和供应商节点节点是供应关系)
@Data
@Builder
@RelationshipEntity(type = "supply")
public class SupplyRelationship {
    @Id
    @GeneratedValue
    private Long id;

    private String indexName;
     
    //关系的一端节点是 公司节点
    @StartNode
    private CompanyGraph company;
   
   //关系的另一端节点是 供应商节点
    @EndNode
    private SupplyGraph supply;
   
   //下面是关系的属性
    /**
     * 采购占比
     */
    @Property(name = "scale")
    private String scale;

    /**
     * 采购金额
     */
    @Property(name = "amount")
    private String amount;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
4.编写repository
// 节点Repository
public interface SupplyGraphRepository extends Neo4jRepository<SupplyGraph,Long> {
    @Query("MATCH (n:supply) RETURN n ")
    List<SupplyGraph> getSupplyNodeList();

    @Query("create (n:supply{name:{name}}) RETURN n ")
    List<SupplyGraph> addSupplyNodeList(@Param("name") String name);
}
// 关系Repository
public interface SupplyRelationshipRepository extends Neo4jRepository<SupplyRelationship, Long> {}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
5.创建neo4j配置类
@Configuration
@EnableNeo4jRepositories(basePackages = "io.fredia.femicro.graph.repository")
@EnableTransactionManagement // 激活SDN隐式事务
public class Neo4jConfig {
}
  • 1
  • 2
  • 3
  • 4
  • 5

保留关键字,不可用做属性

关键字说明关键字说明关键字说明关键字说明
从句
CALLOPTIONALFOREACHUNION
CREATEREMOVEMATCHUNWIND
DELETERETURNLOADWITH
DETACHSETMERGESTART
EXISTS
子句
LIMITORDERSKIPWHERE
YIELD
修饰语
ASCASCENDINGASSERTBY
CSVDESCDESCENDINGON
表达式
ALLCASEELSEEND
THENWHEN
操作符
ANDASCONTAINSDISTINCT去重
ENDSINISNOT
ORSTARTSXOR
Schema
CONSTRAINTCREATEDROPEXISTS
INDEXNODEKEYUNIQUE
Hints
INDEXJOINPERIODICCOMMIT
SCANUSING
常量
falsenulltrue
备用
ADDDOFORMANDATORY
OFREQUIRESCALAR

常用函数

函数描述函数描述
UPPER它用于将所有字母更改为大写字母。LOWER它用于将所有字母改为小写字母。
SUBSTRING它用于获取给定String的子字符串。REPLACE它用于替换一个字符串的子字符串。
COUNT它返回由MATCH命令返回的行数。MAX它从MATCH命令返回的一组行返回最大值。
MIN它返回由MATCH命令返回的一组行的最小值。SUM它返回由MATCH命令返回的所有行的求和值。
AVG它返回由MATCH命令返回的所有行的平均值。shortestPath查询最短路径
collect收集??
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/727754
推荐阅读
相关标签
  

闽ICP备14008679号