Gremlin GroovyTranslator 生成错误结果并在远程服务器上失败

Gremlin GroovyTranslator generates wrong result and fails at remote server

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

GraphTraversal traversal = graph.addV().property("amount", "");
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\",\"\$\")"}' ...
    

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

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

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

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