如何在 Tinkerpop 3 中定义自定义步骤?

kan*_*dal 3 gremlin tinkerpop3

Tinkerpop 2 用于通过 Gremlin.defineStep(..) 支持用户定义的步骤

如何使用 Tinkerpop 3 实现相同的效果?

是否有任何 Gremlin API 可以创建自定义步骤并组合一组遍历步骤?

任何建议将受到高度赞赏。

谢谢卡尼斯卡

ste*_*tte 5

TinkerPop 3.x 的 DSL 开发模式尚未完全建立,因此随着时间的推移,建议可能会发生一些变化。gremlin-users 邮件列表上有与此相关的相关信息。

如果您正在使用 Gremlin Server(或者可以将 Groovy 合并到您的项目中),我认为没有理由不做一些 groovy 元编程来让它工作。使用标准 Gremlin Server zip 发行版编辑generate-modern.groovy 文件以在开头包含以下行:

GraphTraversal.metaClass.knows = { delegate.out('knows') }
Run Code Online (Sandbox Code Playgroud)

然后启动服务器:

bin/gremlin-server.sh conf/gremlin-server-rest-modern.yaml
Run Code Online (Sandbox Code Playgroud)

然后是一个简单的卷曲:

$ curl "http://localhost:8182?gremlin=g.V(1).knows().values('name')"
{"requestId":"66c2c929-9cc2-491d-acb0-ae4d7eef6b00","status":{"message":"","code":200,"attributes":{}},"result":{"data":["vadas","josh"],"meta":{}}}
Run Code Online (Sandbox Code Playgroud)

如果您有复杂的 DSL,您可能不希望所有逻辑都被困在 groovy 脚本中。很简单 - 只需构建一个标准的 groovy 项目,构建一个 jar,包含某种形式的静态初始化程序来调用元编程代码并将其放置在 Gremlin 服务器的路径上。那么你的 init 脚本只需要调用静态初始化器并且你的 DSL 就会被加载。