neo4j的基本使用

neo4j 基本使用

一、基础语法

1.创建节点:
CREATE (n:Label {name:"L1", type:"T1"})
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进行查询
3.创建多个节点和关系:
CREATE (节点1),(节点2),(节点3),(节点1)-[关系1]->(节点2),(节点2)-[关系2]->(节点3)
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
5.更新节点(在意有标签中添加新属性):
MATCH(n:Label) WHERE n.name="N2" SET n.update = "2018-06-26" 
6.删除节点:
MATCH(n) WHERE ID(n)=100 DELETE n
7.查看语句分析:

在查询语句前加上

EXPLAIN 或者 PROFILE

二、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>
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();
	}

三、springboot集成neo4j

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

单机配置

spring:
  data:
    neo4j:
      uri: bolt://localhost:7687
      username: neo4j
      password: neo4j

集群配置

spring:
	data:
		neo4j:
		    # leader:ip1 follower:ip2 ,ip3
      		uri: bolt://ip1:7687
     	    uris: bolt://ip2:7687,bolt://ip3:7687
      		username: neo4j
            password:neo4j
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;


}

【关系实体】

# 供应关系(公司节点和供应商节点节点是供应关系)
@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;
}
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> {}
5.创建neo4j配置类
@Configuration
@EnableNeo4jRepositories(basePackages = "io.fredia.femicro.graph.repository")
@EnableTransactionManagement // 激活SDN隐式事务
public class Neo4jConfig {
}

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

关键字说明关键字说明关键字说明关键字说明
从句
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收集??
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值