美文网首页
gremlin一种图数据库语言的用法

gremlin一种图数据库语言的用法

作者: lodestar | 来源:发表于2021-09-21 23:27 被阅读0次

图数据库的应用场景

  • 知识图谱
  • 社交关系查找
  • 欺诈检查

和mysql一样,我们需要理解节点和边的增删改查,使用如下:

The Gremlin Console 下载地址
https://www.apache.org/dyn/closer.lua/tinkerpop/3.5.1/apache-tinkerpop-gremlin-console-3.5.1-bin.zip

$ cd apache-tinkerpop-gremlin-console-3.5.1
$ bin/gremlin.sh

         \,,,/
         (o o)
-----oOOo-(3)-oOOo-----
plugin activated: tinkerpop.server
plugin activated: tinkerpop.utilities
plugin activated: tinkerpop.tinkergraph
gremlin>
graph = TinkerGraph.open()
g = traversal().withEmbedded(graph)
#注意 这里的id其实并不是作为一个属性
v1 = g.addV("person").property(id, 1).property("name", "marko").property("age", 29).next()
v2 = g.addV("software").property(id, 3).property("name", "lop").property("lang", "java").next()
g.addE("created").from(v1).to(v2).property(id, 9).property("weight", 0.4)

#注意,如果没有加入property(id, 1),会自动生成一个id,通过这个id drop节点的时候,不能删成功,很诡异。只能通过 g.V().has("name","qin2").drop()

#删除边
gremlin> g.V(1).outE().drop()

#更新属性
gremlin> g.V(1).property("age",30)
==>v[1]

#out和outE的区别,一个是获取下一个节点,一个是获取当前节点的边
gremlin> g.V(1).out()
==>v[3]
gremlin> g.V(1).outE()
==>e[9][1-created->3]

#使用 has() (filter) 单步就可以来筛选过滤边,顶点和顶点的属性。

gremlin> g.V().label()
==>person
==>software

gremlin> g.V(1).outE().label()
==>created

gremlin> g.V(1).properties().label()
==>name
==>age

gremlin> g.V().hasLabel('person')
==>v[1]

gremlin> g.V().hasLabel('person').out().has('name',within('lop','kk'))
==>v[3]

#查找Label person的值,类似 Select all

gremlin> g.V().hasLabel('person').valueMap()
==>[name:[marko],age:[29]]

#查找Label person的值,类似 Select name, age
gremlin> g.V().hasLabel('person').values("name","age")
==>marko
==>29

# 遍历元素
gremlin> g.V().elementMap()
==>[id:1,label:person,name:marko,age:29]
==>[id:3,label:software,name:lop,lang:java]
==>[id:4,label:person,name:qin,age:22]
==>[id:7,label:person,name:qin,age:21]

# 遍历边
g.E(9).elementMap()

# 给边created添加属性
g.E(9).property("owner",1)


#age必须在大于20,且小于30
gremlin> g.V().hasLabel("person").has('age',inside(20,30)).values("name")
==>marko
==>qin

g.V(1).out().values('name')
一次从顶点1向外向(从顶点1沿外向边进行一步游走)的获取相邻接点name的遍历



g.V().filter {it.get().label() == 'person'}
一个过滤器(filter)操作,过滤条件是顶点的标签是"person"



相关文章

网友评论

      本文标题:gremlin一种图数据库语言的用法

      本文链接:https://www.haomeiwen.com/subject/anfygltx.html