如何将自定义DSL添加到Gremlin控制台?

问题描述 投票:2回答:1

我正在使用Gremlin控制台与AWS Neptune服务器。我想添加自定义DSL,以缩短数据分析,如这里所述。DSL 所以我可以以如下方式运行查询。

g.persons('marko').knows('josh').hasNext()  

而不是..:

g.V().hasLabel('person').has('name','marko').out('knows').hasLabel('person').has('name','josh').hasNext()

如果我没理解错的话,文档中描述了如何扩展TinkerPop服务器 但由于Neptune不支持,我想扩展Gremlin控制台。有什么简单的方法可以做到这一点吗?

gremlin amazon-neptune
1个回答
2
投票

开发DSL的过程对于任何情况都是一样的。按照你引用的文档中的描述编写你的DSL,然后将其编译成一个jar文件。将jar文件复制到Gremlin Console中。/lib 目录。启动控制台并使用 import 命令来引用你的DSL类,这样你就可以使用它们。

从那里你将需要使用基于远程字节码的遍历连接到你的图,所以假设你的DSL构建了一个 SocialTraversalSource 如示例所示,你可以这样做。

gremlin> import com.mycompany.gremlin.dsl.SocialTraversalSource
...
gremlin> social = traversal(SocialTraversalSource.class).withRemote(...)
...
gremlin> social.persons("marko").knows("josh")

如果你想纯粹在Gremlin Console中开发你的DSL,那么请记住,你只是在Groovy环境中工作,因此可以访问它的全部范围。

gremlin> g = traversal().withRemote('conf/remote-graph.properties')
==>graphtraversalsource[emptygraph[empty], standard]
gremlin> GraphTraversal.metaClass.knows = { String personName ->
......1>     return delegate.out("knows").hasLabel("person").has("name", personName)
......2> }
==>groovysh_evaluate$_run_closure1@6a638c79
gremlin> g.V().has('person','name','marko').knows('josh')
==>v[4]
gremlin> g.V().has('person','name','marko').knows('josh').out().elementMap()
==>[id:5,label:software,name:ripple,lang:java]
==>[id:3,label:software,name:lop,lang:java]

只要稍加修改 元编程 你可以不费吹灰之力地黑进DSL方法。

© www.soinside.com 2019 - 2024. All rights reserved.