neo4j查询两节点之间所有路径/关系

这篇具有很好参考价值的文章主要介绍了neo4j查询两节点之间所有路径/关系。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

数据源

查询两节点有效的路径

所有路径(不准确)

有效路径(准确)

查询两节点之间最短路径

查询两节点之间所有的最短路径


数据源

neo4j查询两节点之间所有路径/关系

查询两节点有效的路径

路径长度(5个节点之内),一般都会做限制,否则数据库一但内容过多就会卡死

所有路径(不准确)

最容易想到的就是这样写,但是结果是不准确的。

match p = (a)-[r*..5]-(b)
where a.name = '刘备' and b.name='刘禅'
return p

neo4j查询两节点之间所有路径/关系

为什么不准确?

可以看到,刘禅与关羽、张飞、糜夫人、糜芳、糜竺  关系不是很大,因为他们是刘备的关系群

那为何还是能搜到呢?

因为我们设置了最大路径是5

因此张飞出现的原因就是这样的路径

刘备-张飞-刘备-刘禅

刘备-张飞-关羽-刘备-刘禅

可以看到,刘备(目标节点)在一条路径中出现了两次,所以导致一些不相关的节点出现了,其他节点(糜夫人、糜芳、糜竺)也是类似问题。

问题验证

我们可以把每条路径中的节点名称抽取出来看看

match p = (a)-[r*..5]-(b)
where a.name = '刘备' and b.name='刘禅'
return extract(n in nodes(p)| n.name)

neo4j查询两节点之间所有路径/关系

与我们想的结果一致

如何解决这个问题?

问题就是在一条路径(p)中,有重复人员的出现

那么解决方案就是,去掉路径(p)中有重复人员的路径(p)

// 相当于遍历nodes, 每得到一个node就在nodes中找一下他自己有几个,如果不等于1就不要了
and ALL( n1 in nodes(p) where size(filter(n2 in nodes(p) where id(n1) = id(n2)))=1 )
// 新版本neo4j 不支持fliter函数 用[]代替
and ALL( n1 in nodes(p) where size([n2 in nodes(p) where id(n1) = id(n2)])=1 )

有效路径(准确)

最终方案

match p = (a)-[r*..5]-(b)
where a.name = '刘备' and b.name='刘禅'
and ALL( n1 in nodes(p) where size(filter(n2 in nodes(p) where id(n1) = id(n2)))=1 )
return p

// 新版
match p = (a)-[r*..5]-(b) 
where a.name = '刘备' and b.name='刘禅' 
and ALL( n1 in nodes(p) where size([n2 in nodes(p) where id(n1) = id(n2)])=1 ) 
return p

neo4j查询两节点之间所有路径/关系neo4j查询两节点之间所有路径/关系

查询两节点之间最短路径

// TODO 还可以设置最短路径权重

match p = shortestpath((a)-[r*0..4]-(b))
where a.name = '刘备' and b.name='刘禅'
return p

查询两节点之间所有的最短路径

最短路径如果不加权重的话,不如用所有最短路径,因为你没有规定最短路径的含义。

这个也经常用,但是如果梳理两个节点关系的时候 这样写会漏掉长的路径,导致结果不完全。文章来源地址https://www.toymoban.com/news/detail-410399.html

match p = allshortestpaths((a)-[r*0..4]-(b))
where a.name = '刘备' and b.name='刘禅'
return p

到了这里,关于neo4j查询两节点之间所有路径/关系的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Neo4j-双向关系

    这是GraphAware中关于双向关系的解释。 网址链接Modelling Data in Neo4j: Bidirectional Relationships | GraphAware Neo4j中的关系必须有一个语义化的类型和方向。 没有方向关系是模棱两可的,上面A队打败B队,如果没有方向,就不知道谁打败了谁。 还有一个常见的错误,同时创建两个具有相

    2024年02月07日
    浏览(42)
  • Neo4j入门:手动构建节点关系

    目录 一、基本cypher语句建立节点和关系 建立节点 带属性的节点 一次建立多个节点 建立两个节点之间的关系 二、用CSV文件导入方法对Neo4j Desktop批量创建节点和关系 批量创建节点 创建一个编码为utf-8格式的CSV文件 将CSV文件放入到我们neo4j目录下面的import目录下 回到Neo4j执行

    2024年01月16日
    浏览(53)
  • neo4j批量追加属性、节点、关系

    前提:这个方法是用python连接neo4j再循环执行cql语句来实现的,适合1w条记录以内的数据,太大了就比较慢,平均1s执行30条语句左右。 主要的不同就在于cql语句的使用 连接数据库: 读取节点表和关系表,该文件是存储好的csv文件 中文是替代的文件名字,不是源文件名 替换

    2024年02月16日
    浏览(50)
  • Neo4j中创建关系的常用操作

    Neo4j图数据库遵循属性图模型来存储和管理其数据。 根据属性图模型,关系应该是定向的。 因此,基于方向性,Neo4j关系被分为两种类型: 单向关系 双向关系 在使用Neo4j CQL CREATE命令来创建两个节点时主要分为一下几种场景(适用于Uni和双向关系): 在两个现有节点之间创

    2024年04月23日
    浏览(40)
  • Neo4j导入CSV文件(实体和关系)

    打开cmd切换到neo4j安装目录的bin下,输入以下命令 如果想读取不在import directory中的CSV,则: (1)先改变neo4j默认设置,即:删除dbms.directories.import=import或者在该语句前加“#”; (2)使用 “LOAD CSV FROM file:///C:/XXX/name.csv”(即:file:///+绝对路径), 导入本地CSV文件 。

    2024年02月15日
    浏览(56)
  • neo4j cypher查询

    1. 创建节点和关系   使用CREATE命令创建节点和关系。例如,要创建一个名为“John”的人节点,可以使用以下命令:   ``` CREATE (:Person {name: \\\'John\\\'}) ```   这将创建一个类型为“Person”的节点,并将其属性“name”设置为“John”。   要创建一个名为“likes”的关系,将“John”节点

    2024年02月08日
    浏览(45)
  • 图数据库Neo4j——SpringBoot使用Neo4j & 简单增删改查 & 复杂查询初步

    图形数据库是专门用于存储图形数据的数据库,它使用图形模型来存储数据,并且支持复杂的图形查询。常见的图形数据库有Neo4j、OrientDB等。 Neo4j是用Java实现的开源NoSQL图数据库,本篇博客介绍如何在SpringBoot中使用Neo4j图数据库,如何进行简单的增删改查,以及如何进行复杂

    2024年02月06日
    浏览(63)
  • Springboot集成neo4j实现知识图谱关系图

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 使用neo4j来完成人员关系 公司项目有一个功能需要将各个人员关系列出,在参加评选的时候,进行展示和筛选 neo4j是高性能的NOSQL图形数据库,在neo4j中,社区版本只能使用一个database。在neo4j中不存在表的

    2024年02月02日
    浏览(44)
  • Pycharm+Neo4j红楼梦人物关系图谱

    欢迎来到我的主页~【蜡笔小新..】 本篇收录于专栏【Python】 如果对你有帮助,希望点赞收藏加关注啦~ 前言 neo4j基础知识 Pycharm及代码实现  py2neo  数据集获取 代码介绍 Python实验课时,老师提到用知识图谱构建红楼梦的人物关系图,所以课后根据视频和博客的学习,初尝试

    2024年04月14日
    浏览(32)
  • 图数据库_Neo4j和SpringBoot整合使用_实战创建明星关系图谱---Neo4j图数据库工作笔记0010

    2023-09-10 10:37:48 补充 注意:下面是旧版本的语法,如果你发现@NodeEntity这样的注解没有的话可以这样: 这里就要用@Node 另外如果@StartNode和@EndNode都没有了,那么说明是用法变了. 关于最新的用法,在官网有明确的说明和案例,很有用: 下面给出官网的案例:

    2024年02月12日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包