neo4j学习总结

需求分析,架构设计,知识建模,知识抽取,可视化展示


知识图谱模型设计方法

参照与对标
适配和裁剪
归纳与总结
抽象和提炼


基于搜索引擎的商业数据分析
行业分析:整体市场趋势,细分市场趋势
品牌分析:品牌市场份额,品牌粘性,品牌游离度
媒体分析:
话题分析:热点排行,话题排行
用户画像:自然属性分析,兴趣属性分布

知识图谱技术在企业中的运用
利用 知识图谱+用户画像 判断最适合用户的产品,服务人员
利用企业知识库搭建知识图谱让客服机器人更加智能
利用知识图谱+爬虫自动从社交网络提取人际关系网络

实体:可以有若干属性
关系:必须有方向,也可以有属性

查看图数据库结构:call db.schema
统计查询 match(n) return  p,count(p)

环境准备

docker run -d --name container_name -p 7474:7474 -p 7687:7687 -v /home/neo4j/data:/data -v /home/neo4j/logs:/logs -v /home/neo4j/conf:/var/lib/neo4j/conf -v /home/neo4j/import:/var/lib/neo4j/import --env NEO4J_AUTH=neo4j/123456 neo4j

依赖管理

2.4以下使用
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-neo4j</artifactId>
</dependency>


2.4以尚上使用
<dependency>
    <groupId>org.neo4j.driver</groupId>
    <artifactId>neo4j-java-driver-spring-boot-starter</artifactId>
    <version>4.3.6.0</version> 
</dependency>

 基于spring-boot-starter-data-neo4j

@Node
public class BantuLabel extends BaseEntity
{
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue
    private String labelId;
    @Property
    private String status;
}


  @Relationship
  @RelationshipId

 自定义neo4j 主键类型

/**
 * 自定义neo4j 主键类型
 */
public class Neo4JUUIDGenerator implements IdGenerator<String> {

    @Override
    public String generateId(String primaryLabel, Object entity) {
        return UUID.randomUUID().toString().replace("-","");
    }
}

基于Driver功能代码

   @Bean(name = "session")
public Session neo4jSession() {
    Driver driver = GraphDatabase.driver(url, AuthTokens.basic(username, password));
    return driver.session();
}


    @Autowired
    private Driver driver;
    @Autowired
    private Session  session;



    @Test
    void contextLoads() {
        //Session session = driver.session();
        String cql = "match(p:Person) return p";
        Result result = session.run(cql);
        List<Record> list = result.list();
        Map<Object, Object> responseMap = new HashMap<>();
        for (int i = 0; i < list.size(); i++) {
            Record record = list.get(i);
            List<Value> values = record.values();
            for (Value value : values) {
                //属性值
                Map<String, Object> resultMap = value.asMap();
                //获取id
                Node node = value.asNode();
                long id = node.id();
                responseMap.put("id", id);
                responseMap.putAll(resultMap);
                log.info("responseMap:" + JSON.toJSONString(responseMap));
            }
        }
    }


      Driver driver = GraphDatabase.driver("bolt://127.0.0.1:7687", AuthTokens.basic("neo4j", "neo4j"));
        Session session = driver.session();
        String  cql="match(o:organization)  return  o  limit 1";
        Result result = session.run(cql);
        List<Record> list = result.list();
        Map<Object, Object> responseMap = new HashMap<>();
        for (int i = 0; i < list.size(); i++) {
            Record record = list.get(i);
            List<Value> values = record.values();
            for (Value value : values) {
                //属性值
                Map<String, Object> resultMap = value.asMap();
                //获取id
                Node node = value.asNode();
                long id = node.id();
                responseMap.put("id", id);
                responseMap.putAll(resultMap);
                log.info("responseMap:" + JSON.toJSONString(responseMap));
            }
        }

 CQL

#根据id查询 
MATCH (n) WHERE id(n)=13 RETURN n

#查询总条数
String countCypher = "match (n: %s) RETURN count(*) as count";
Record record = countResult.next();
long   total = record.get("count").asInt();


#不等于
MATCH (n:Article) where  id(n) <>284  RETURN n LIMIT 25

#创建多个标签
create(node-name:label-name1:label-name2{})

#where 子句
和mysql操作运算符基本相同,如  =,!=,<>,>,<等
and,or,not

清空库
MATCH (n) DETACH DELETE n

delete子句和remove子句
delete
   删除节点
   删除节点以及节点和关系
 
match(a:Article)-[r:related_to]->(p)  delete r

remove子句
删除节点或关系的标签
删除节点或关系的属性
match(a:Article{name:"神墓"}) remove a.cid

set子句
向现有节点或关系添加新属性
添加或更新属性值

#最短路径
match p = shortestpath((:hero{name:"孙尚香"})-[*..3]-(:hero{name:"武则天"})) return p

#查询所有路径数据
String cql="match p=(person:Person{name:$startName})-[*]-(person2:Person{name:$endName}) return p";
#限制深度
String cql="match p=(person:Person{name:$startName})-[*1..4]-(person2:Person{name:$endName}) return  p"; 
#最短路径
String cql="match  p=shortestPatch((person:Person{name:$startName})-[*1..4]-(person2:Person{name:$endName})) return p";
 


#增加唯一约束
CREATE CONSTRAINT ON (p:person) ASSERT p.identifier IS UNIQUE
 
#指定关系向下查询所有
match p=((m:organization)-[r:subordinate_of*]->(n:organization)) where n.identifier='organization20220620' return  p 

 neo4j-admin使用


数据库备份
对Neo4j数据进行备份、还原、迁移的操作时,要关闭neo4j
cd %NEO4J_HOME%/bin
#关闭neo4j
neo4j stop
#备份
neo4j-admin dump --database=graph.db --to=/neo4j/backup/graph_backup.dump


#数据库恢复
#还原、迁移之前 ,要关闭neo4j服务
neo4j-admin load --from=E:/data/neo4j.dump --database=graph.db --force
#重启服务
neo4j start

 

 

SpringBoot结合Neo4j_青癯的博客-CSDN博客_springboot整合neo4jSpringBoot结合Neo4j一篇文章就搞定假期无聊玩玩图数据库,顺便记录一下学习的收获。文章目录SpringBoot结合Neo4j一篇文章就搞定前言一、环境以及相关配置二、业务逻辑代码前言实验室有知识图谱的项目,用到了图数据库,Neo4j的前置知识这里就不过多介绍了,这里直接讲解SpringBoot如何与Neo4j结合。neo4j官网 Spring Data Neo4j一、环境以及相关配置这里不多说了,直接挂出来pom.xml文件,大家参考一下,注意版本。springboothttps://blog.csdn.net/qq_42265220/article/details/122940784

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值