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收集??
<think>我们正在处理一个关于Neo4j使用指南的查询。根据用户的要求,我们需要生成结构清晰的回答,并参考提供的引用内容。同时,我们还需要在回答中遵循系统级指令,包括LaTeX格式和引用标识。 用户引用了四个来源: [^1]: 2024最新Neo4j详细使用指南,包含Neo4j的特点、优点以及JDK版本对应关系。 [^2]: Neo4j Streams使用指南,涉及与Kafka的集成。 [^3]: 探索Neo4j与LLM结合构建知识图谱,使用LangChain与Neo4j AuraDB。 [^4]: 图数据库Neo4j入门指南,包括安装和基础操作,以及适用场景。 用户的问题:我想获取neo4j使用指南,请问neo4j使用方法和指南? 我们将组织回答如下: 1. 简介:简要介绍Neo4j。 2. 安装与配置:包括环境要求(如JDK版本)和安装步骤。 3. 基础操作:包括数据模型、CQL(Cypher)基本命令。 4. 高级功能:如Neo4j Streams(与Kafka集成)、Neo4j AuraDB(云服务)以及与其他工具(如LangChain)的结合。 5. 应用场景:列举Neo4j的典型应用场景。 6. 学习资源:提供进一步学习的文档和资源。 同时,在回答末尾生成相关问题。 注意:由于引用内容有限,我们将主要基于引用内容进行回答,并补充一些通用知识(确保真实可靠)。 现在开始构建回答:</think>### Neo4j使用指南 Neo4j是一个高性能的NoSQL图数据库,采用原生图存储引擎处理高度关联数据。以下是根据最新实践整理的完整指南: #### 一、环境配置 1. **版本要求** - JDK版本需严格匹配(如Neo4j 5.x需JDK17)[^1] - 支持操作系统:Windows/Linux/macOS ```bash # Linux安装示例 wget https://neo4j.com/artifact.php?name=neo4j-community-5.20.0-unix.tar.gz tar -xf neo4j-community-5.20.0-unix.tar.gz ``` 2. **核心配置** 修改`neo4j.conf`: ```properties dbms.default_listen_address=0.0.0.0 dbms.security.auth_enabled=true # 启用认证 dbms.memory.heap.initial_size=2g # JVM堆大小 ``` #### 二、数据建模基础 1. **图数据模型** - 节点(Node):实体(如`Person`) - 关系(Relationship):带方向的连接(如`KNOWS`) - 属性(Property):键值对数据存储 $$G = (V,E) \quad \text{其中} \quad V=\text{节点}, E=\text{边}$$ 2. **Cypher查询语言** ```cypher // 创建带属性的节点 CREATE (:Person {name: 'Alice', age: 30})-[:FRIEND]->(:Person {name: 'Bob'}) // 路径查询 MATCH (a:Person)-[:FRIEND*2..5]-(b) WHERE a.name = 'Alice' RETURN b.name ``` #### 三、核心操作 1. **数据写入** ```cypher // 批量导入CSV LOAD CSV WITH HEADERS FROM 'file:///users.csv' AS row CREATE (:User {id: row.id, email: row.email}) ``` 2. **实时查询优化** - 使用索引加速查询: ```cypher CREATE INDEX user_email IF NOT EXISTS FOR (u:User) ON (u.email) ``` - 查询性能公式:$Q_t = O(\log n)$(索引查询复杂度) #### 四、高级应用 1. **流处理集成** 通过Neo4j Streams实现Kafka同步: ```yaml # neo4j.conf配置 kafka.bootstrap.servers=kafka:9092 streams.sink.topic.cypher.mytopic=MATCH (n) RETURN n ``` 支持实时数据摄入和变更捕获(CDC)[^2] 2. **AI知识图谱构建** 结合LangChain与Neo4j AuraDB: ```python from langchain.graphs import Neo4jGraph graph = Neo4jGraph(url="neo4j+s://<aura-id>.databases.neo4j.io", username="neo4j", password="<password>") graph.add_triples([("Einstein", "born_in", "Ulm")]) ``` #### 五、典型应用场景[^4] 1. **社交网络分析** ```cypher // 计算三度人脉 MATCH (p:Person)-[:KNOWS*1..3]-(friend) WHERE p.name = 'Alice' RETURN COUNT(DISTINCT friend) ``` 2. **实时推荐系统** 基于Jaccard相似度算法: $$sim(u,v) = \frac{|N(u) \cap N(v)|}{|N(u) \cup N(v)|}$$ 3. **欺诈检测** 识别环形交易模式: ```cypher MATCH p=(a)-[:TRANSFER*3]->(a) WHERE a.risk_score > 0.8 RETURN p ``` #### 六、运维管理 1. **备份恢复** ```bash neo4j-admin database backup neo4j --to-path=/backups neo4j-admin database restore --from-path=/backups/neo4j.dump ``` 2. **监控指标** 关键指标:查询延迟、堆内存使用、活跃连接数 > **学习资源** > - 官方文档:[Neo4j Documentation](https://neo4j.com/docs/) > - Cypher手册:[Cypher Refcard](https://neo4j.com/docs/cypher-refcard/current/) > - 实战课程:[Neo4j GraphAcademy](https://graphacademy.neo4j.com/)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值