- Apache TinkerPop Gremlin
- 以下代码来源 Getting Started 需要参考官网示例图学习
The First Five Minutes
遍历图的基础知识
- g.V() 遍历图中所有顶点
- g.V(1).outE(‘knows’) 获取顶点“1”延伸出的所有带有标签“knows”的边指向的顶点
- g.V(1).outE(‘knows’).inV().values(’name’) 获取具有唯一标识符“ 1”“知道”的顶点的人员的名称
- g.V(1).out(‘knows’).values(’name’) = g.V(1).outE(‘knows’).inV().values(’name’)
- g.V(1).out(‘knows’).has(‘age’, gt(30)).values(’name’) 找出顶点1的小弟中谁的年龄大于30
变量 g 只需要被实例化一次
The Next Fifteen Minutes
- “label” 是顶点的保留属性
- “id” 是边的保留属性
- 也可以自己随意添加属性
创建图
|
|
Graph Traversal - Staying Simple
简单的图遍历
- g.V().has(’name’,‘marko’) 搜索所有符合条件(name = marko)的顶点
- g.V().has(‘person’,’name’,‘marko’) 通过将顶点 label 包括在过滤器中,以确保“名称”属性键引用“人”顶点
重要提示:上面的查询会迭代图中的所有顶点以获取其答案。对于我们的小示例来说,这很好,但是对于数百万或十亿个边缘的图来说,这是个大问题。要解决此问题,您应该考虑使用索引。TinkerPop不提供索引管理的抽象。您应该查阅所选图形的文档,并利用其本机API创建索引,从而加快这些类型的查找。但是,遍历将保持不变,因为索引将在执行时透明地使用。
- g.V().has(‘person’,’name’,‘marko’).outE(‘created’) 找出所有 label = created 的边指向的顶点关系
- g.V().has(‘person’,’name’,‘marko’).outE(‘created’).inV() 获得边另一端的所有顶点对象
- g.V().has(‘person’,’name’,‘marko’).out(‘created’) = g.V().has(‘person’,’name’,‘marko’).outE(‘created’).inV()
- g.V().has(‘person’,’name’,‘marko’).out(‘created’).values(’name’) 获得顶点的 name 属性值
Graph Traversal - Increasing Complexity
图遍历-越来越复杂
- g.V().has(‘person’,’name’,within(‘vadas’,‘marko’)).values(‘age’) 使用 within 查找 name in (‘vadas’,‘marko’) 的 age 属性的值
- g.V().has(‘person’,’name’,within(‘vadas’,‘marko’)).values(‘age’).mean() mean() “vadas”和“ marko”的平均年龄
- g.V().has(‘person’,’name’,‘marko’).
out(‘created’).in(‘created’).
values(’name’)
- g.V().has(‘person’,’name’,‘marko’).out(‘created’) 找到 marko 创建的顶点
- in(‘created’).values(’name’) 所有指向该顶点的顶点 name 属性的值
- g.V().has(‘person’,’name’,‘marko’).as(’exclude’). out(‘created’).in(‘created’). where(neq(’exclude’)). values(’name’) 除自己以外的软件开发者
- g.V().group().by(label) 按 label 分组(值为顶点对象)
- g.V().group().by(label).by(’name’) 分组后显示 name 的值
不明白
|
|
The Final Ten Minutes
TIP 要在Graph创建时保持抽象,请使用GraphFactory.open()构造新实例。请参阅各个Graph实现的文档,以了解要提供的配置选项。