图形数据库之Neo4j核心概念介绍(二)

news/2024/7/8 5:17:35 标签: neo4j, 知识图谱, 图形



最近这段时间一直在搞知识图谱的一个项目,有点忙,所以博客更新有点慢,现在第一阶段的开发基本完活,后面有空会总结几篇与neo4j有关的文章。

有关neo4j的介绍和使用场景,这里不多说了,不了解的朋友可以参考我之前的文章 http://qindongliang.iteye.com/blog/2327919

我们的使用场景是用来存知识图谱有关的数据简单说就是会把从小学到高中所有的科目的里面的知识点给存储起来,让后建立知识点与知识点之间的依赖关系,从而最终会形成一张复杂的知识网络。举个例子:

比如某个学生,要学习化学里面的某个知识点,但是这个知识点可能与物理有联系,也可能这个知识点与数学也有联系,想要学习和掌握这个知识点,他应该怎么做呢?有了知识图谱网络,就能帮他快速的提供一些有用的信息:

(1)告诉他先学习那几个知识点

(2)告诉他这个知识点有几种途径

(3)告诉他最快的掌握方式是什么

(4)如果掌握了,通过知识点与题目的关联,能给他出一些起到练习巩固的效果

(5)其他....

当然有了图谱数据之后,其实能从里面挖掘出很多其他的信息,当然需要跟具体的业务结合,才能产生的真正的价值。比如北京市的公交站地图或者地铁地图。

言归正传,做项目期间大致看了一遍neo4j官网的文档和它提供的查询语言cypher(英文为翻译的意思)

什么是Cypher?

cypher是neo4j官网的提供的声明式图谱查询语言,用来可视化查询展示图谱里面的节点和关系,围绕图谱查询提供了可读性好和容易使用,功能强大的众多优点。

按照官网的说法,cypher的产生,参考了动态编程语言的一些语法,如python,ruby,scala,有非常多的强大的函数库,我们也项目里也用了一些复杂的语法,确实非常强大,不过想要运用自如,确实得花一定时间测试使用才行。

下面介绍下neo4j的几个核心概念:

(1) Nodes(节点,类似地铁图里的一个地铁站)

图谱的基本单位主要是节点和关系,他们都可以包含属性,一个节点就是一行数据,一个关系也是一行数据,里面的属性就是数据库里面的row里面的字段。

除了属性之外,关系和节点还可以有零到多个标签,标签也可以认为是一个特殊分组方式。

(2) Relationships(关系,类似两个相邻地铁站之间路线)

关系的功能是组织和连接节点,一个关系连接2个节点,一个开始节点和一个结束节点。当所有的点被连接起来,就形成了一张图谱,通过关系可以组织节点形成任意的结构,比如list,tree,map,tuple,或者更复杂的结构。关系拥有方向进和出,代表一种指向。

(3) Properties(属性,类似地铁站的名字,位置,大小,进出口数量等)

属性非常类似数据库里面的字段,只有节点和关系可以拥有0到多个属性,属性类型基本和java的数据类型一致,分为 数值,字符串,布尔,以及其他的一些类型,字段名必须是字符串。

(4) Labels(标签,类似地铁站的属于哪个区)

标签通过形容一种角色或者给节点加上一种类型,一个节点可以有多个类型,通过类型区分一类节点,这样在查询时候可以更加方便和高效,除此之外标签在给属性建立索引或者约束时候也会用到。label名称必须是非空的unicode字符串,另外lables最大标记容量是int的最大值,近似21亿。

(5) Traversal(遍历,类似我们看地图找路径)

查询时候通常是遍历图谱然后找到路径,在遍历时通常会有一个开始节点,然后根据cpyher提供的查询语句,遍历相关路径上的节点和关系,从而得到最终的结果。

(6) Paths(路径,类似从一个地铁站到另一个地铁站的所有的到达路径)

路径是一个或多个节点通过关系连接起来的产物,例如得到图谱查询或者遍历的结果。

(7) Schema(模式,类似存储数据的结构)

neo4j是一个无模式或者less模式的图谱数据库,像mongodb,solr,lucene或者es一样,你可以使用它不需要定义任何schema,

Indexes(索引)

遍历图通过需要大量的随机读写,如果没有索引,则可能意味着每次都是全图扫描,这样效率非常低下,为了获得更好的性能,我们可以在字段属性上构建索引,这样任何查询操作都会使用索引,从而大幅度提升seek性能,

构建索引是一个异步请求,并不会立刻生效,会再后台创建直至成功后,才能最终生效。如果创建失败,可以重建索引,先删除索引,在创建即可,然后从log里面找出创建失败的原因然后分析。

Constraints(约束)

约束可以定义在某个字段上,限制字段值唯一,创建约束会自动创建索引。

至此对neo4j里面的核心概念已经介绍完毕,其实就是实际生活中的例子的抽象,如果还不能理解图数据库,就想一下每个城市的公交图或者地铁图,后面散仙会写一些具体用法的例子。


有什么问题可以扫码关注微信公众号:我是攻城师(woshigcs),在后台留言咨询。 
技术债不能欠,健康债更不能欠, 求道之路,与君同行。 



http://www.niftyadmin.cn/n/788315.html

相关文章

关于 图的 一些基本概念~~·

1路径 (1)路径长度: 边数n称为路径长度。 (2)简单路径: 所有顶点都不相同的路径(即不含重复使用的顶点)。 (3)轨迹: 各边互不相同的路径称为轨迹(即不含重复边) 2连通 (1)连通图: 图G中的任意两点之间都存在一条路径&…

Python数据可视化~matplot默认配置修改(可解决中文、负号等显示问题)

原文链接:http://www.juzicode.com/archives/2421 在matplotlib中默认是不能正常显示中文: import numpy as np import matplotlib.pyplot as plt import matplotlib as mplif __name__ __main__:x np.arange(-3,5) y x*x*xplt.title("桔子code…

如何在Spring Boot项目使用参数校验

开发web项目有时候我们需要对controller层传过来的参数进行一些基本的校验,比如非空,非null,整数值的范围,字符串的个数,日期,邮箱等等。最常见的就是我们直接写代码校验,这样以后比较繁琐&…

Python错误集锦:TypeError: unsupported operand type(s) for +: ‘int’ and ‘str’

原文链接:http://www.juzicode.com/archives/2411 错误提示: 进行加减法运算时提示:TypeError: unsupported operand type(s) for : ‘int’ and ‘str’: D:\juzicode>python test.py Traceback (most recent call last):Fi…

Neo4j的Rest接口使用

Neo4j的服务除了提供了基于java的客户端驱动包,同时也支持我们通过rest服务访问它,这一点非常便捷,意味着任何支持http访问的编程语言都可以使用cypher的rest来访问neo4j,同时支持http报文以streaming的形式的返回数据&#xff0c…

UBOOT 目录

1.arch 文件夹 这个文件夹里面存放着和架构有关的文件 2.board 文件夹 board 文件夹就是和具体的板子有关的 3.configs 文件夹 配置文件统一命名为“xxx_defconfig”,xxx 表示开发板名字,这些 defconfig 文件都存放在 configs 文件夹 4 …

Python错误集锦:matplotlib legend提示:ValueError: Unrecognized location ‘upper’. Valid locations are

原文链接:http://www.juzicode.com/archives/2486 错误提示: 使用matplotlib legend提示:ValueError: Unrecognized location ‘upper’. Valid locations are Traceback (most recent call last):File "09-plt-step.py", line 3…

如何在shell中curl一个带变量的post请求

有时候,我们想在一个shell中,执行一段脚本,循环post一段json数据,而且body里面的字段名和值都可以是一个变量应该怎么做?test.shid1111name"ct"curl http://192.1.13.100:8888/dataservice/knowledge/create…