【发布时间】:2019-09-03 13:09:20
【问题描述】:
我有一个嵌入式 Neo4j 数据库,并且正在使用 fluent API 对其运行 Gremlin 遍历。我需要能够针对该数据库执行 Gremlin 脚本(不是 Cypher)。但是,由于不是通过集群实例访问嵌入式 Neo4j 数据库,我不知道如何获取具有执行 Gremlin 脚本的必要方法的客户端对象的句柄......例如client.sumbit(query)。
如何做到这一点?
【问题讨论】:
我有一个嵌入式 Neo4j 数据库,并且正在使用 fluent API 对其运行 Gremlin 遍历。我需要能够针对该数据库执行 Gremlin 脚本(不是 Cypher)。但是,由于不是通过集群实例访问嵌入式 Neo4j 数据库,我不知道如何获取具有执行 Gremlin 脚本的必要方法的客户端对象的句柄......例如client.sumbit(query)。
如何做到这一点?
【问题讨论】:
我认为您是说您想在代码中针对 Neo4j 处理 Gremlin 字符串。您可以直接使用GremlinGroovyScriptEngine。这是一个使用 TinkerGraph 而不是 Neo4j 的简单示例(显然,您可以轻松地在 Neo4j 中交换,并且此代码将以相同的方式工作):
gremlin> bindings = new javax.script.SimpleBindings()
gremlin> bindings.put('g', TinkerFactory.createModern().traversal())
gremlin> engine = new org.apache.tinkerpop.gremlin.groovy.jsr223.GremlinGroovyScriptEngine()
==>org.apache.tinkerpop.gremlin.groovy.jsr223.GremlinGroovyScriptEngine@7b676112
gremlin> results = engine.eval("g.V(1)", bindings).toList()
==>v[1]
TinkerPop 还有一个更高级的GremlinExecutor,它封装了GremlinGroovyScriptEngine,并提供了一些您可能会觉得有用的附加功能。
【讨论】:
g.addV('Person2').property('name', 'Jill').next() 我会收到以下信息:"org.neo4j.graphdb.NotFoundException: org.neo4j.internal.kernel.api.exceptions.EntityNotFoundException: Unable to load NODE with id 846." 知道为什么会这样吗?
eval() 电话?是否涉及多个线程?也许您需要在某处g.tx().commit()您的交易?