【图数据库实战】gremlin语法

news/2024/7/17 3:46:20
Gremlin 是 Apache TinkerPop 的图遍历语言。Gremlin 是一种函数式数据流语言,使用户能够简洁地表达对其应用程序属性图的复杂遍历(或查询)。每个 Gremlin 遍历都由一系列(可能嵌套的)步骤组成。步骤对数据流执行原子操作。每个步骤都是映射步骤(转换流中的对象)、过滤步骤(从流中删除对象)或副作用步骤(计算有关流的统计信息)。Gremlin 步骤库扩展了这 3 个基本操作,为用户提供了丰富的步骤集合,他们可以编写这些步骤,以便询问他们可能对数据有任何可能的问题,因为 Gremlin 是图灵完备的。

1、安装

1)下载  Apache Download Mirrors
2)解压 apache-tinkerpop-gremlin-console-3.7.0-bin.zip
3)执行命令
$ bin/gremlin.sh\,,,/(o o)
-----oOOo-(3)-oOOo-----
plugin activated: tinkerpop.server
plugin activated: tinkerpop.utilities
plugin activated: tinkerpop.tinkergraph
gremlin> graph = TinkerFactory.createModern()
==>tinkergraph[vertices:6 edges:6]
gremlin> g = traversal().withEmbedded(graph)
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
gremlin>

  2、语法试用

以内置的Mordern图数据为数据,进行gremlin语法的hello world练习。
Mordern图的数据为:
gremlin> graph = TinkerFactory.createModern()
==>tinkergraph[vertices:6 edges:6]
gremlin> g = traversal().withEmbedded(graph)
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
# 1. Get all the vertices in the Graph.
gremlin> g.V()
==>v[1]
==>v[2]
==>v[3]
==>v[4]
==>v[5]
==>v[6]
# 2. Get the vertex with the unique identifier of "1".
gremlin> g.V(1)
==>v[1]
# 3. Get the value of the name property on the vertex with the unique identifier of "1".
gremlin> g.V(1).values('name')
==>marko
# 4. Get the edges with the label "knows" for the vertex with the unique identifier of "1".
gremlin> g.V(1).outE('knows')
==>e[7][1-knows->2]
==>e[8][1-knows->4]
# 5. Get the names of the people whom the vertex with the unique identifier of "1" "knows".
gremlin> g.V(1).outE('knows').inV().values('name')
==>vadas
==>josh
#6. Note that when one uses outE().inV() as shown in the previous command, this can be shortened to just out() (similar to inE().outV() and in() for incoming edges).
gremlin> g.V(1).out('knows').values('name')
==>vadas
==>josh
#7.  Get the names of the people vertex "1" knows who are over the age of 30.
gremlin> g.V(1).out('knows').has('age', gt(30)).values('name')
==>josh
gremlin>

3、创建图

gremlin> graph = TinkerGraph.open()
==>tinkergraph[vertices:0 edges:0]
gremlin> g = traversal().withEmbedded(graph)
==>graphtraversalsource[tinkergraph[vertices:0 edges:0], standard]
gremlin> v1 = g.addV("person").property(id, 1).property("name", "marko").property("age", 29).next()
==>v[1]
gremlin> v2 = g.addV("software").property(id, 3).property("name", "lop").property("lang", "java").next()
==>v[3]
gremlin> g.V()
==>v[1]
==>v[3]

4、图遍历

gremlin> graph = TinkerFactory.createModern()
==>tinkergraph[vertices:6 edges:6]
gremlin> g = traversal().withEmbedded(graph)
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
gremlin> g.V().has('name','marko')
==>v[1]
gremlin> g.V().has('person','name','marko')
==>v[1]
gremlin> g.V().has('person','name','marko').outE('created')
==>e[9][1-created->3]
gremlin> g.V().has('person','name','marko').outE('created')
==>e[9][1-created->3]
gremlin> g.V().has('person','name','marko').out('created').values('name')
==>lop
gremlin> g.V().has('person','name',within('vadas','marko')).values('age')
==>29
==>27
gremlin> g.V().has('person','name',within('vadas','marko')).values('age').mean()
==>28.0


https://www.xjx100.cn/news/3091908.html

相关文章

20天拿下华为OD笔试之【DP/贪心】2023B-观看文艺汇演【欧弟算法】全网注释最详细分类最全的华为OD真题题解

文章目录 【DP/贪心】2023B-观看文艺汇演题目描述与示例输入输出示例一输入输出说明 示例二输入输出说明 示例三输入输出 解题思路原始数据处理贪心思想求解问题动态规划求解问题 代码解法一:贪心时空复杂度 解法二:DP时空复杂度 华为OD算法冲刺训练 【D…

场景中的解剖学方向标记_vtkAnnotatedCubeActor

开发环境: Windows 11 家庭中文版Microsoft Visual Studio Community 2019VTK-9.3.0.rc0vtk-example参考代码 demo解决问题:显示标记当前视角、空间的方位,关键对象vtkAnnotatedCubeActor: vtkAnnotatedCubeActor 是一个混合3D 演员&#xf…

YOLOv8-Seg改进:位置信息的轴线压缩增强注意力Sea_Attention| ICLR2023 SeaFormer,轻量级语义分割算法,复旦大学和腾讯

🚀🚀🚀本文改进:位置信息的轴线压缩增强注意力Sea_Attention,一方面将QKV特征进行轴线压缩后再注意力增强,另一方面将QKV特征使用卷积网络提升局部信息,最后将二者融合,输出增强特征 🚀🚀🚀Sea_Attention小目标分割首选,暴力涨点 🚀🚀🚀YOLOv8-seg创新…

Leetcode2216. 美化数组的最少删除数

Every day a Leetcode 题目来源:2216. 美化数组的最少删除数 解法1:模拟 使用变量 count 代表已删除的元素个数,由于每次删除元素,剩余元素都会往前移动,因此当前下标为 i - count。 遍历一次数组 nums&#xff0…

最前端|低代码平台轻松设计可视化图表【内含网站资源】

在前端设计中,我们经常需要使用可视化图表来呈现数据和信息。然而,每次都要自己从头开始设计图表未免太过繁琐。为了解决这个问题,我们调研了low code平台上的可视化图表功能。 本篇文章为大家带来以下问题的解答: (1&…

基于 Eureka 的 Ribbon 负载均衡实现原理【SpringCloud 源码分析】

目录 一、前言 二、源码分析 三、负载均衡策略 一、前言 如下图,我们在 orderserver 中通过 restTemplate 向 usersever 发起 http 请求,在服务拉取的时候,主机名 localhost 是用服务名 userserver 代替的,那么该 url 是一个可…

怎么实现在微信公众号募捐的功能呢

实现在微信公众号募捐的功能,需要结合微信公众平台和后端开发技术,同时要考虑到募捐的合法性和安全性。下面将介绍整个实现过程,包括前期准备、开发流程和后期运营等方面。 一、前期准备 确定募捐目的:明确募捐的目的和用途&…

MAX/MSP SDK学习04:Messages selector的使用

其实消息选择器在simplemax示例中就接触到了,但这文档非要讲那么抽象。目前为止对消息选择器的理解是:可判断接收过来的消息是否符合本Object的处理要求,比如加法对象只可接收数值型的消息以处理,但不能接收t_symbol型的消息&…