【问题标题】:How can Gremlin script be executed for an embedded Neo4j database?如何为嵌入式 Neo4j 数据库执行 Gremlin 脚本?
【发布时间】:2019-09-03 13:09:20
【问题描述】:

我有一个嵌入式 Neo4j 数据库,并且正在使用 fluent API 对其运行 Gremlin 遍历。我需要能够针对该数据库执行 Gremlin 脚本(不是 Cypher)。但是,由于不是通过集群实例访问嵌入式 Neo4j 数据库,我不知道如何获取具有执行 Gremlin 脚本的必要方法的客户端对象的句柄......例如client.sumbit(query)。

如何做到这一点?

【问题讨论】:

    标签: java neo4j gremlin


    【解决方案1】:

    我认为您是说您想在代码中针对 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()您的交易?
    猜你喜欢
    • 2015-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多