neo4j学习笔记

2023-11-06

neo4j - note

一、概述

1.链接

官网: https://neo4j.com/

官网document: https://neo4j.com/docs/getting-started/current/

官网下载: https://neo4j.com/download-center/

官网指令操作指南: https://neo4j.com/docs/cypher-manual/current/clauses/

文字教程: http://www.vue5.com/neo4j/neo4j_exe_environment_setup.html

w3school: https://www.w3cschool.cn/neo4j/ 推荐这个文字教程

B站教程: https://www.bilibili.com/video/BV1HQ4y1h78j/?spm_id_from=333.337.search-card.all.click 讲得不太好,可以看文字教程即可

spring-data neo4j: https://spring.io/projects/spring-data-neo4j#learn

spring-data neo4j: https://neo4j.com/developer/spring-data-neo4j/

2.介绍

百度百科的明星关系

银行欺诈检测

反洗钱

供应链管理

与MYSQL对比

MYSQL NEO4J
节点
列和数据 属性和数据
约束 关系

数据模型

属性图模型规则

  • 代表节点,关系和属性中的数据
  • 节点和关系都包含属性
  • 关系连接节点
  • 属性是键值对
  • 节点使用圆圈表示,关系用箭头键表示。
  • 关系有方向:单向和双向。
  • 每个关系包含“起始节点”或“从节点”和“到节点”或“结束节点”

构件:

  • 节点
  • 属性
  • 关系
  • 标签
  • 数据浏览器,浏览器打开数据库

二、使用

1.环境搭建

如果neo4j.4.X + 的版本要当前jvm环境是 jdk 11

下载3.x的最高版本

设置NEO4J_HOME = C: neo4j-community-2.1.3

设置PATH = C: neo4j-community-2.1.3 bin;

启动控制台

neo4j console  

desktop客户端也可以操作,推荐,客户端可以安装不同版本的 server

http://localhost:7474/

初始用户名和密码 neo4j

登录后会要求改密码 123456

2.CQL

CQL命令/条 用法
CREATE 创建 创建节点,关系和属性
MATCH 匹配 检索有关节点,关系和属性数据
RETURN 返回 返回查询结果
WHERE 哪里 提供条件过滤检索数据
DELETE 删除 删除节点和关系
REMOVE 移除 删除节点和关系的属性
ORDER BY以…排序 排序检索数据
SET 组 添加或更新标签

1. 创建 Create

语法元素 描述
CREATE 它是一个Neo4j CQL命令。
它是我们要创建的节点名称。
它是一个节点标签名称
CREATE (dept:Dept)   无属性

语法说明:

语法元素 描述
它是我们将要创建的节点名称。
它是一个节点标签名称
属性是键值对。 定义将分配给创建节点的属性的名称
属性是键值对。 定义将分配给创建节点的属性的值
带属性节点
CREATE (
   <node-name>:<label-name>
   { 	
      <Property1-name>:<Property1-Value>
      ........
      <Propertyn-name>:<Propertyn-Value>
   }
)

CREATE (dept:Dept {deptno:10,dname:"Accounting",location:"Hyderabad" })
CREATE (emp:Employee{id:123,name:"Lokesh",sal:35000,deptno:10})
CREATE (m:Dept:Employee{id:138})  #创建m节点,对应多个标签

2. 查询Match

  • 从数据库获取有关节点和属性的数据
  • 从数据库获取有关节点,关系和属性的数据
MATCH 
(
   <node-name>:<label-name>
)
#获取25个节点
MATCH (n) RETURN n LIMIT 25

# 查询Dept下的内容
MATCH (dept:Dept) return dept

# 查询Employee标签下 id=123,name="Lokesh"的节点
MATCH (p:Employee {id:123,name:"Lokesh"}) RETURN p

## 查询Employee标签下name="Lokesh"的节点,使用(where命令)
MATCH (p:Employee)
WHERE p.name = "Lokesh"
RETURN p

## 返回lin的关联关系及节点
match p=(:Employee{name:"lin"}) -[r:HAVE]->() return p 

## 查询neo4j帮我们自动生成的<id>
MATCH (n:Dept) where id(n)=42 RETURN n LIMIT 25

3. Return

需要搭配查询语句match,不可单独用
RETURN 
   <node-name>.<property1-name>,
   ........
   <node-name>.<propertyn-name>
   
return n 返回整个节点
return n.deptno 就返回n的属性  

MATCH (dept: Dept) RETURN dept.deptno,dept.dname,dept.location

4. 关系基础-创建

基于方向性,Neo4j关系被分为两种主要类型。

  • 单向关系
  • 双向关系

在以下场景中,我们可以使用Neo4j CQL CREATE命令来创建两个节点之间的关系。 这些情况适用于Uni和双向关系。

  • 在两个现有节点之间创建无属性的关系
  • 在两个现有节点之间创建有属性的关系
  • 在两个新节点之间创建无属性的关系
  • 在两个新节点之间创建有属性的关系
  • 在具有WHERE子句的两个退出节点之间创建/不使用属性的关系
CREATE (cc:CreditCard{id:"5001",number:"1234567890",cvv:"888",expiredate:"20/17"})
CREATE (e:Customer{id:"1001",name:"Abc",dob:"01/10/1982"})
MATCH (<node1-label-name>:<nodel-name>),(<node2-label-name>:<node2-name>)
CREATE  
	(<node1-label-name>)-[<relationship-label-name>:<relationship-name>{<define-properties-list>}]->(<node2-label-name>)
RETURN <relationship-label-name>
(1) 现有节点之间创建无属性的关系

客户指向信用卡

MATCH (e:Customer),(cc:CreditCard) 
CREATE (e)-[r:DO_SHOPPING_WITH ]->(cc) 

查询

MATCH (e)-[r:DO_SHOPPING_WITH ]->(cc)  RETURN r   #返回单纯的关系

MATCH p=()-[r:DO_SHOPPING_WITH]->() RETURN p  #返回这个关系所连接的所有节点
(2) 现有节点之间创建有属性的关系
MATCH (cust:Customer{name:"lin"}),(cc:CreditCard) 
CREATE (cust)-[r:DO_SHOPPING_WITH_PROP{shopdate:"12/12/2014",price:55000}]->(cc) 
RETURN r
MATCH (cust:Customer{name:"lin"}),(cc:CreditCard),(r:Relation) 
where r.form=cust.name
CREATE (cust)-[r:DO_SHOPPING_WITH_PROP{shopdate:"12/12/2014",price:55000}]->(cc) 
RETURN r
(3) 新节点之间创建无属性的关系
# LIKES关系标签  like关系名称,一般写r即可
CREATE (fb1:FaceBookProfile1)-[like:LIKES]->(fb2:FaceBookProfile2) 

查询关系

MATCH (fb1:FaceBookProfile1)-[like:LIKES]->(fb2:FaceBookProfile2) 
RETURN like

MATCH (e)-[r:LIKES ]->(cc)  RETURN r
(4) 新节点之间创建有属性的关系
CREATE (video1:YoutubeVideo1{title:"Action Movie1",updated_by:"Abc",uploaded_date:"10/10/2010"})
-[movie:ACTION_MOVIES{rating:1}]->
(video2:YoutubeVideo2{title:"Action Movie2",updated_by:"Xyz",uploaded_date:"12/12/2012"}) 
MATCH p=()-[r:ACTION_MOVIES]->() RETURN p LIMIT 25

MATCH (video1)-[r:ACTION_MOVIES]->(video2) 
RETURN video1,video2
(5) 检索关系节点的详细信息 用这个
MATCH (cust)-[r:DO_SHOPPING_WITH]->(cc) 
RETURN cust,cc

5. where子句

AND RO NOT

MATCH (emp:Employee) 
WHERE emp.name = 'Abc' OR emp.name = 'Xyz'
RETURN emp
# WHERE子句在两个现有节点之间创建了一个NEW关系
MATCH (cust:Customer),(cc:CreditCard) 
WHERE cust.id = "1001" AND cc.id= "5001" 
CREATE (cust)-[r:DO_SHOPPING_WITH{shopdate:"12/12/2014",price:55000}]->(cc) 
RETURN r

6. delete删除(节点和关系)

  • 删除节点。
  • 删除节点及相关节点和关系。

删除节点

MATCH (e: Employee) DELETE e

删除节点和关系

MATCH (cc: FaceBookProfile1)-[rel]-(c:FaceBookProfile2) 
DELETE cc,c,rel

删除关系

MATCH (cc: CreditCard)-[rel]-(c:Customer) 
DELETE rel

7. remove删除(标签和属性)

  • 删除节点或关系的标签
  • 删除节点或关系的属性
CREATE (book:Book {id:122,title:"Neo4j Tutorial",pages:340,price:250}) 

MATCH (book : Book)
RETURN book
删除属性
MATCH (book { id:122 })
REMOVE book.price
RETURN book

类似于SQL 
ALTER TABLE BOOK REMOVE COLUMN PRICE;
SELECT * FROM BOOK WHERE ID = 122;
删除多标签节点 中的一个标签
MATCH (m:Employee) where m.id=138
REMOVE m:Dept

8. set子句更新

向现有节点或关系添加新属性

MATCH (n:YoutubeVideo1)
set n.updated_by='lin'
return n

9. roder/limit/union/skip

order by

MATCH (emp:Employee)
RETURN emp.empid,emp.name,emp.salary,emp.deptno
ORDER BY emp.name DESC

union 它将两组结果中的公共行组合并返回到一组结果中。 它不从两个节点返回重复的行。

MATCH (cc:CreditCard)
RETURN cc.id as id,cc.number as number,cc.name as name,
   cc.valid_from as valid_from,cc.valid_to as valid_to
UNION
MATCH (dc:DebitCard)
RETURN dc.id as id,dc.number as number,dc.name as name,
   dc.valid_from as valid_from,dc.valid_to as valid_to

union all 它结合并返回两个结果集的所有行成一个单一的结果集。它还返回由两个节点重复行。

MATCH (cc:CreditCard)
RETURN cc.id as id,cc.number as number,cc.name as name,
   cc.valid_from as valid_from,cc.valid_to as valid_to
UNION ALL
MATCH (dc:DebitCard)
RETURN dc.id as id,dc.number as number,dc.name as name,
   dc.valid_from as valid_from,dc.valid_to as valid_to

limit skip

MATCH (emp:Employee) 
RETURN emp
LIMIT/SKIP 2

10.合并

MERGE = CREATE + MATCH

MERGE命令检查该节点在数据库中是否可用。 如果它不存在,它创建新节点。 否则,它不创建新的

MATCH  (gp2:GoogleProfile2) 
RETURN gp2.Id,gp2.Name

11.NULL值 / IN

MATCH (e:Employee) 
WHERE e.id IS NULL
RETURN e.id,e.name,e.sal,e.deptno
MATCH (e:Employee) 
WHERE e.id IN [123,124]
RETURN e.id,e.name,e.sal,e.deptno

3.函数

字符串函数

描述
UPPER 它用于将所有字母更改为大写字母。
LOWER 它用于将所有字母改为小写字母。
SUBSTRING 它用于获取给定String的子字符串。
REPLACE 它用于替换一个字符串的子字符串。
MATCH (e:Employee) 
RETURN e.id,UPPER(e.name),e.sal,e.deptno

MATCH (e:Employee) 
RETURN e.id,SUBSTRING(e.name,0,2),e.sal,e.deptno

聚合函数

聚集功能 描述
COUNT 它返回由MATCH命令返回的行数。
MAX 它从MATCH命令返回的一组行返回最大值。
MIN 它返回由MATCH命令返回的一组行的最小值。
SUM 它返回由MATCH命令返回的所有行的求和值。
AVG 它返回由MATCH命令返回的所有行的平均值。
MATCH (e:Employee) RETURN COUNT(*)

MATCH (e:Employee) 
RETURN MAX(e.sal),MIN(e.sal)

MATCH (e:Employee) 
RETURN SUM(e.sal),AVG(e.sal)

关系函数

描述
STARTNODE 它用于知道关系的开始节点。
ENDNODE 它用于知道关系的结束节点。
ID 它用于知道关系的ID。
TYPE 它用于知道字符串表示中的一个关系的TYPE。
MATCH (a)-[movie:ACTION_MOVIES]->(b) 
RETURN STARTNODE(movie)

MATCH (a)-[movie:ACTION_MOVIES]->(b) 
RETURN ENDNODE(movie)

MATCH (a)-[movie:ACTION_MOVIES]->(b) 
RETURN ID(movie),TYPE(movie)

4.索引

CREATE INDEX ON :<label_name> (<property_name>)

CREATE INDEX ON :Customer (name)
DROP INDEX ON :<label_name> (<property_name>)

DROP INDEX ON :Customer (name)

5.UNIQUE约束

CREATE CONSTRAINT ON (cc:CreditCard)
ASSERT cc.number IS UNIQUE
DROP CONSTRAINT ON (cc:CreditCard)
ASSERT cc.number IS UNIQUE

三、代码运用

1. spring data neo4j 5.x

参考spring官网

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-neo4j</artifactId>
             <version>2.3.6.RELEASE</version>
</dependency>

新版本替换了下面的注解

    <dependency>
      <groupId>org.springframework.data</groupId>
      <artifactId>spring-data-neo4j</artifactId>
      <version>5.3.5.RELEASE</version>
      <scope>compile</scope>
    </dependency>

使用5.x版本 是下面的Old 如果是6.x版本关系不好理解,且官网文档写不清楚关系如何连接

Old New
org.neo4j.ogm.annotation.NodeEntity org.springframework.data.neo4j.core.schema.Node
org.neo4j.ogm.annotation.GeneratedValue org.springframework.data.neo4j.core.schema.GeneratedValue
org.neo4j.ogm.annotation.Id org.springframework.data.neo4j.core.schema.Id
org.neo4j.ogm.annotation.Property org.springframework.data.neo4j.core.schema.Property
org.neo4j.ogm.annotation.Relationship org.springframework.data.neo4j.core.schema.Relationship
(1) node
package com.lin.neo4j.domain;

import lombok.Builder;
import lombok.Data;
import org.neo4j.ogm.annotation.GeneratedValue;
import org.neo4j.ogm.annotation.Id;
import org.neo4j.ogm.annotation.NodeEntity;
import org.neo4j.ogm.annotation.Property;

@Data
@Builder
@NodeEntity("Dept") // 标签:默认就是类名
public class Dept {
    @Id // 声明主键
    @GeneratedValue  // 声明该字段为neo4j自动生成的<id>映射的字段
    private Long id;

    @Property("deptno") // 如果名称不一样可用
    private Integer deptno;

    private String dname;

    private String location;
}
@Data
@NodeEntity
public class Person {
    @Id
    @GeneratedValue
    private Long id;

    private String name;
}
import lombok.Data;
import org.neo4j.ogm.annotation.EndNode;
import org.neo4j.ogm.annotation.GeneratedValue;
import org.neo4j.ogm.annotation.Id;
import org.neo4j.ogm.annotation.RelationshipEntity;
import org.neo4j.ogm.annotation.StartNode;

/**
 * 部门关系
 */
@Data
@RelationshipEntity(type = "DeptRelationShip")
public class DeptRelationShip {
    @Id
    @GeneratedValue
    private Long id;

    private String name;

    @StartNode
    private Dept startNode;

    @EndNode
    private Person endNode;
}
(2) repository
import com.lin.neo4j.domain.Dept;

import org.springframework.data.neo4j.annotation.Query;
import org.springframework.data.neo4j.repository.Neo4jRepository;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface DeptRepository extends Neo4jRepository<Dept,Long> {

    @Query(value = "create (d:Dept {deptno:{0},dname:{1},location:{2}})")
    void create(Integer deptno, String dname, String location);

    Dept findByDeptno(Integer deptno);

    List<Dept> findByDeptnoOrderByDeptnoAsc(Integer deptno);

}

@Repository
public interface DeptRelationRepository extends Neo4jRepository<DeptRelationShip, Long> {

}
  List<Person> findByEmailAddressAndLastname(EmailAddress emailAddress, String lastname);

  // Enables the distinct flag for the query
  List<Person> findDistinctPeopleByLastnameOrFirstname(String lastname, String firstname);
  List<Person> findPeopleDistinctByLastnameOrFirstname(String lastname, String firstname);

  // Enabling ignoring case for an individual property
  List<Person> findByLastnameIgnoreCase(String lastname);
  // Enabling ignoring case for all suitable properties
  List<Person> findByLastnameAndFirstnameAllIgnoreCase(String lastname, String firstname);

  // Enabling static ORDER BY for a query
  List<Person> findByLastnameOrderByFirstnameAsc(String lastname);
  List<Person> findByLastnameOrderByFirstnameDesc(String lastname);
Page<User> findByLastname(String lastname, Pageable pageable);

Slice<User> findByLastname(String lastname, Pageable pageable);

List<User> findByLastname(String lastname, Sort sort);

List<User> findByLastname(String lastname, Pageable pageable);


Sort sort = Sort.by("firstname").ascending()
  .and(Sort.by("lastname").descending());

limit

User findFirstByOrderByLastnameAsc();

User findTopByOrderByAgeDesc();

Page<User> queryFirst10ByLastname(String lastname, Pageable pageable);

Slice<User> findTop3ByLastname(String lastname, Pageable pageable);

List<User> findFirst10ByLastname(String lastname, Sort sort);

List<User> findTop10ByLastname(String lastname, Pageable pageable);

组合结果

interface PersonRepository extends Repository<Person, Long> {
  Streamable<Person> findByFirstnameContaining(String firstname);
  Streamable<Person> findByLastnameContaining(String lastname);
}

Streamable<Person> result = repository.findByFirstnameContaining("av")
  .and(repository.findByLastnameContaining("ea"));
(3) operate实践
@SpringBootTest(classes = Application.class)
@RunWith(SpringRunner.class)
public class NodeTest {
    @Autowired
    private DeptRepository deptRepository;

    @Test
    public void testCreate() {
       deptRepository.create(6,"技术部","深圳");
       deptRepository.save(Dept.builder().deptno(3).dname("人力资源").location("广州").build());
    }

    @Test
    public void testDelete() {
        // 这里的删除有关系也能删除掉
        deptRepository.deleteById(40L);
    }

    @Test
    public void testDeptQuery() {
        final Iterable<Dept> all = deptRepository.findAll();
        all.forEach(e-> System.out.println(e));
        System.out.println(deptRepository.findById(40L));
    }

    @Test
    public void testDeptNativeQuery() {
        Dept deptn = deptRepository.findByDeptno(4);
        System.out.println(deptn);
        System.out.println(deptRepository.findByDeptno(4));
    }
}
@SpringBootTest(classes = Application.class)
@RunWith(SpringRunner.class)
public class RelationTest {
    @Autowired
    private DeptRepository deptRepository;

    @Autowired
    private DeptRelationRepository deptRelationRepository;

    @Test
    public void testRelation() {
        DeptRelationShip deptRelationShip = new DeptRelationShip();
        deptRelationShip.setName("归属");

        Dept dept = deptRepository.findById(86L).orElse(null);
        deptRelationShip.setStartNode(dept);

        Person person = new Person();
        person.setName("霖");
//        person.setId(106L);
        deptRelationShip.setEndNode(person);

        // 这里的保存关系 会连带保存person新节点,如果person设置id且该id已存在,则不新建person节点
        deptRelationRepository.save(deptRelationShip);
    }

    @Test
    public void testRelationQuery() {
        Iterable<DeptRelationShip> deptRelationAll = deptRelationRepository.findAll();
        deptRelationAll.forEach(e-> System.out.println(e));
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

neo4j学习笔记 的相关文章

  • neo4j 使用选项卡加载 CSV

    我正在尝试使用以下命令加载 csv 并在 neo4j 2 1 0 中创建节点 使用定期提交 从 file c temp listings TXT 加载 CSV AS 行 FIELDTERMINATOR t CREATE p person i
  • 按关系属性排序 neo4j

    使用 Neo4j 1 9 3 我想创建一个音乐节目列表 在给定的节目中可能会表演三段 每件作品都有一个与之关联的作曲家 并且可能出现在许多不同的程序中 因此我无法在作品节点上放置序列号 我假设我可以创建该程序 其与每个部分的关系如下所示 p
  • 如何从 py2neo 获取自动节点 ID?

    我正在使用 py2neo 3 1 2 版本和 Neo4j 3 2 0 我有一个问题 在 Neo4J 的 Web 界面上 我可以运行以下查询来获取节点 id MATCH n Person RETURN ID n 我想知道 py2neo API
  • Neo4j 客户端使用“DateTime?”展开

    我目前正在尝试展开具有 日期时间 的 TravelEdges 列表 但我不断收到以下错误 CypherTypeException 类型不匹配 需要一个地图 但是字符串 2018 05 21T08 38 00 我目前正在使用最新版本的 neo
  • 一起使用 MongoDB 和 Neo4j

    我正在开始一个新项目 我正在考虑使用 MongoDB 作为文档存储工具 使用 Neo4j 作为映射文档之间关系的机制 然后我想通过 REST API 公开查询结果 人们会说这样做的优点和缺点是什么 是否有更好的方法可以使用不同的 NoSQL
  • 将 mongodb 与 neo4j 集成,是否有任何 API 可以链接它们?

    我正在研究推荐引擎 用户数据被收集 他们的友谊 位置 喜欢 教育 并已存储在 mongodb 中 我需要向这些用户推荐相关产品 我计划使用 Neo4j 作为推荐引擎 原因很明显 易于节点之间的遍历 路径信息 问题是我必须首先将 mongod
  • Neo4j 的数据库级验证

    我使用 Neo4j 作为我的图形数据库 假设我想限制用户名字段的长度小于10 有没有办法在数据库级别施加这样的约束 现在 您必须在应用程序级别上执行此操作 或者通过注册一个事务提交挂钩来检查该属性字段是否符合特定标准 See http do
  • Cypher - 匹配两个不同的可能路径并返回两者

    我有一个数据集 我在这里作为示例表示 http console neo4j org id 3dq78v http console neo4j org id 3dq78v 我想要做的是对于图表中的每个 Z 节点 该示例只有一个 但我有很多 我
  • 使用 Cypher,如何返回仅包含其属性子集的节点

    假设我在 Neo4j 中创建了一个节点 CREATE Thing a foo b bar 我可以编写一个查询来获取该节点及其所有属性 MATCH n Thing a foo RETURN n 返回 a foo b bar 但是是否可以匹配一
  • 如何将dbpedia导入neo4j? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我需要将 dbpedia 导入 neo4j 我从这里下载 dbpedia http wiki dbpedia org Download
  • 使用 neo4j 建模有序树

    我刚刚开始使用 neo4j 并且了解图形和关系的原理 但是我在想要建模的某些结构方面遇到了一些麻烦 我想在编程语言项目中使用它 并存储已解析源文件的 AST 从那里 我计划向节点添加大量额外的数据和关系 以帮助分析和工具 但基本的 AST
  • 带子图聚合的递归查询(任意深度)

    我问了一个问题earlier https stackoverflow com questions 28036055 recursive query with sub graph aggreagation关于沿着图表聚合数量 提供的两个答案效
  • 有没有办法从密码结果中删除 _id _type

    我使用 apoc convert toTree 过程将查询结果转换为树 然后过滤结果以仅获取几个属性 但是 在生成的有效负载中 我得到了两个无法删除的属性 id 和 type 这是我的查询 我应该只获取 prefLabel 和 uri MA
  • 如何禁用 Spring Data Neo4j 的登录

    我从 spring neo4j 收到不需要的查询日志 如下所示 25 08 2018 23 47 07 597 restartedMain INFO o n o d bolt request BoltRequest executeReque
  • 如何结识有相同兴趣的朋友的朋友?

    交朋友的朋友很容易 我得到了这个 看起来效果很好 g v 1 in FRIEND in FRIEND filter it g v 1 但我想做的只是结交有相同兴趣的朋友的朋友 下面我希望 Joe 被推荐为 Moe 而不是 Noe 因为他们没
  • SET label : 将标签名称作为参数传递

    我有一个这样的查询 将 data 展开为行 MERGE p Book guid row bookGuid set p name row name p Science 我想传递标签 科学 作为参数 因为该标签对于我在 data 中传递的所有行
  • 是否有工具可以将 Neo4j 图转储为 Cypher 并从 Cypher 重新加载它?

    每个熟悉 MySQL 的人都可能使用过 mysqldump 命令 它可以生成代表 MySQL 数据库中的架构和数据的 SQL 语句文件 这些 SQL 文本文件通常用于多种用途 备份 播种副本 在安装之间复制数据库 将产品数据库复制到临时环境
  • 没有 Neo4Django 的 Django 和 Neo4j

    我正在使用 Neo4j 以及 Postgres 构建一个 Django 应用程序 我发现这个 Django 集成称为新4django https github com scholrly neo4django 我想知道是否可以只使用neo4r
  • lucene 如何与 Neo4j 配合使用

    我是新来的Neo4j and Solr Lucene 我读到我们可以在 Neo4j 中使用 lucene 查询 这是如何工作的 Neo4j中使用lucene查询有什么用 我还需要一个建议 我需要编写一个应用程序来搜索和分析数据 which
  • Neo4J 2.1.3 唯一性约束被违反,这是一个错误吗?

    我们有一个 Neo4J 2 1 3 数据库 并且有一个创建的唯一性约束 如下所示 在 段 SEGMENT 断言上创建约束 segmentId 是唯一的 当我们从浏览器测试这一点时 它可以很好地检测违规行为 例如 CREATE n SEGME

随机推荐

  • 基于VUE的可隐藏的顶部菜单栏组件

    效果图
  • 给我flink on k8s的执行命令案例

    在K8s上运行Flink的执行命令案例如下 1 下载Flink并将其解压到您的工作目录 wget https archive apache org dist flink flink 1 10 2 flink 1 10 2 bin scala
  • 【语义分割】10、ISNet: Integrate Image-Level and Semantic-Level Context for Semantic Segmentation

    出处 ICCV2021 文章目录 一 背景 二 动机 三 方法 3 1 整体过程 3 2 Image Level Context Module 3 3 Semantic Level Context Module 3 4 Loss Funct
  • h5学习笔记:flex space-between 实现左右对齐布局

    今天在尝试拼小程序界面的时候一直想换种口味 于是想使用flex布局 小程序支持flex也比较好 今天遇到一个问题就是要实现一个一左 一右 方式布局 之前习惯了用绝对布局的方式 可以将右边的元素实现right 0 处理 细心想了一既然使用fl
  • netdata监控服务器主机(包括Docker容器)

    效果 Docker部署 创建挂载目录 mkdir p data netdata netdatacache netdatalib docker运行 docker run d name netdata p 19999 19999 v data
  • 四个问题,判断自己是否适合学习编程

    下面有四个问题 可以测一测你是否适合学习编程 你的逻辑和抽象思维能力比较强吗 你愿意花费很多业余时间去学习新的东西吗 你对研究和探索未知领域保持足够的好奇心吗 遇到问题和困难的时候你有足够的耐心和毅力去解决吗 如果上面这四个问题中有三个及以
  • Unity导入模型一面有贴图另一面透明的解决方案

    出现这种情况是因为模型用了双面材质 而Unity不支持双面材质 故导入模型到Unity中 会出现一面有贴图 另一面透明的情况 解决方法 1 自定义一个双面材质Shader 代码如下 Shader Nature Vegitation Vert
  • 手把手教你添加多个IP地址

    IP地址 IP地址是指互联网协议地址 又译为网际协议地址 是IP协议提供的一种统一的地址格式 它为互联网上的每一个网络和每一台主机分配一个逻辑地址 以此来屏蔽物理地址的差异 子网掩码 子网掩码又叫网络掩码 地址掩码 子网络遮罩 它用来指明一
  • Linux如何查看JDK的安装路径

    which java 首先要申明一下which java是定位不到安装路径的 which java定位到的是java程序的执行路径 root localhost which java usr bin java root localhost
  • sqli-labs-master第21关、22关

    前言 昨天我们研究了http头部cookie注入 反正我是让让抓包软件给搞死了 废了老半天劲 我们来研究下加密后的cookie 第21关 看到这个页面我们还是输入用户密码 返回了这个页面 提示了一系列的信息 我们还是抓包分析下 看到了加密后
  • 【RocketMQ】设计理念与核心概念扫盲

    RocketMQ 设计理念与核心概念扫盲 文章目录 RocketMQ 设计理念与核心概念扫盲 一 RocketMQ的设计理念和目标 1 1 设计理念 1 2 设计目标 二 RocketMQ的核心概念扫盲篇 2 1 部署架构 2 1 1 Na
  • 公司规定所有接口都用 POST请求?

    最近在逛知乎的时候发现一个有趣的问题 公司规定所有接口都用 post 请求 这是为什么 看到这个问题的时候其实我也挺有感触的 因为我也曾经这样问过我自己 在19的时候接到一个项目是从零开始搭建一个微服务 当时就有了解过接口的一些规范 比如耳
  • Myeclipse8.x集成Aptana

    MyEclipse8 x集成Aptana 2011 01 02 14 25 47 分类 Java 举报 字号 订阅 前几天在网上找了很多关于MyEclipse集成Aptana插件 找到的只有MyEclipse6 0的版本 而且都是同一篇文章
  • SpringBoot系列教程JPA之update使用姿势

    通过本篇博文 您至少可以选到 save 直接根据id来修改记录 利用jpl 实现查询修改的使用姿势 初识事物的神秘面纱 I 环境准备 在开始之前 当然得先准备好基础环境 如安装测试使用mysql 创建SpringBoot项目工程 设置好配置
  • 【源码篇】基于ssm+vue+微信小程序的医疗科普小程序

    系统介绍 这是一个ssm vue 微信小程序的医疗科普小程序 分为pc端和微信小程序端 pc端包括 管理员角色和学生角色 管理员拥有 学生管理 科普知识管理 论坛管理 收藏管理 试卷管理 留言板管理 试题管理 系统管理 考试管理 学生端拥有
  • keil中下载程序界面设置

    下午在调试DAU的时候忽然出现internal command error的情况 以往是将下载器重新上电或编译器重启既可 但是今天这一招怎么也不灵光了 换一个硬件可以正常下载 不死心 试着修改下载器选项 当Connect选择为Under R
  • 游戏UI特效教程 章鱼学院UI动效基础课(68课)

    本文包含两大单元 展示类动效原型单元 可交互动效原型单元 在展示类动效单元中 我们会着重利用AE这款软件 由浅入深的 对三个案例进行学习并制作 通过学习这个单元的知识 大家可以掌握UI动效中 AE基本的使用技巧 并在带领下完成三个案例 通过
  • ts 移动端h5 拍照预览

    通过typescript实现一个简单版本 移动端 拍照 和预览功能 1 需求列表 点击拍照唤起手机后置摄像头 拍照完成在页面预览照片 2 技术实现 2 1 布局和唤起后置摄像头 唤起摄像头采用 input 里面 type file 类型 为
  • Shell脚本攻略:文本三剑客之sed

    目录 一 理论 1 sed 二 实验 1 sed命令的寻址打印 2 显示奇偶 3 查找替换 4 后向引用 5 截取版本号 6 替换IP地址 一 理论 1 sed 1 概念 sed 英文全称为stream editor流式编辑器 sed 对输
  • neo4j学习笔记

    文章目录 neo4j note 一 概述 1 链接 2 介绍 数据模型 二 使用 1 环境搭建 2 CQL 1 创建 Create 2 查询Match 3 Return 4 关系基础 创建 1 现有节点之间创建无属性的关系 2 现有节点之间