Neo4j如何表示带权重的关系

栏目: 数据库 · 发布时间: 7年前

内容简介:点击量:2方法其实很简单:“苏州”

点击量:2

问题描述

我们知道图数据库可以用来表示节点之间的关系,大多数情况下,这个功能就足够使用了。但有时候我们希望知道这些关系的权重是怎样的,也就是说我们需要一个带权重的图(weighted graph)。比如,我们以上海周边城市图谱为例。先用如下cypher语句创建节点和关系:

CREATE (Shanghai:City {name:'上海'})

CREATE (Suzhou:City {name:'苏州'})

CREATE (Wuxi:City {name:'无锡'})

CREATE (Nanjing:City {name:'南京'})

CREATE (Ningbo:City {name:'宁波'})

CREATE (Shanghai)-[:Neighbor]->(Suzhou)

CREATE (Shanghai)-[:Neighbor]->(Wuxi)

CREATE (Shanghai)-[:Neighbor]->(Nanjing)

CREATE (Shanghai)-[:Neighbor]->(Ningbo)

可视化如下:

Neo4j如何表示带权重的关系

解决方案

方法其实很简单: 只要在关系里添加一个属性 就行了,比如我们可以在 Neighbor 添加一个属性: distance 用于表示两个城市之间的距离。具体地,

  • 如果是刚创建,我们只要把之前的语句做如下修改:
    CREATE (Shanghai)-[:Neighbor {distance:80}]->(Suzhou)
    
    CREATE (Shanghai)-[:Neighbor {distance:120}]->(Wuxi)
    
    CREATE (Shanghai)-[:Neighbor {distance:300}]->(Nanjing)
    
    CREATE (Shanghai)-[:Neighbor {distance:250}]->(Ningbo)
  • 对于已存在的节点和关系,则可以通过如下语句更新:

    MATCH (c1:City{name:'上海'}), (c2:City {name:'苏州'})
    
    MERGE (c1)-[r:Neighbor]-(c2)
    
    ON MATCH SET
    
    r={distance:80}
    
    ...

权重加好之后,我们就可以通过如下语句按照距离对上海周边城市进行排序:

MATCH (c1:City {name:'上海'})-[r:Neighbor]->(c2) RETURN c2.name order by r.distance

得到如下结果:

“苏州”

“无锡”

“宁波”

“南京”

全文完。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

The Art and Science of Java

The Art and Science of Java

Eric Roberts / Addison-Wesley / 2007-3-1 / USD 121.60

In The Art and Science of Java, Stanford professor and well-known leader in CS Education Eric Roberts emphasizes the student-friendly exposition that led to the success of The Art and Science of C. By......一起来看看 《The Art and Science of Java》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换