首页 > 解决方案 > Gremlin GroovyTranslator 生成错误结果并在远程服务器上失败

问题描述

我正在使用 Gremlin java,我发现 GroovyTranslator在符号\之前添加了额外的内容$,这导致查询无法在远程服务器上执行。

GraphTraversal traversal = graph.addV().property("amount", "$1");
System.out.println(GroovyTranslator.of("g").translate(traversal.asAdmin().getBytecode()));

翻译结果:

g.addV().property("amount","\$1")
  1. 如果这是 GroovyTranslator 的问题,我可以替换\$$,但我不确定更多特殊字符是否会出现此问题。

  2. 由于反斜杠而失败,但是如果某些属性值想要使用反斜杠怎么办?
    据我所知,使用反斜杠总是会失败。
    我想以下应该工作,但它没有:

    curl -X POST -d '{"gremlin":"g.V().has(\"key\",\"\\$\")"}' ...
    

标签: gremlin

解决方案


在 Groovy 中,如果您使用的是 Groovy 字符串 (GStrings),则美元符号具有特殊含义。它用于指示插值应该发生,如下所示:

gremlin> a=3
==>3
gremlin> "The number is $a"
==>The number is 3

如果您要连接的服务器按原样使用 Groovy 来解析查询,则需要使用反斜杠。如果服务器没有按原样使用 Groovy,那么您将需要删除反斜杠。

使用 GroovyTranslator 还需要注意其他一些事项。(int) 3当它生成文字数字时,它会在查询中放入诸如此类的强制转换。根据您连接到的后端图形数据库,您可能还需要删除这些。


推荐阅读