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

Gremlin GroovyTranslator生成错误结果并在远程服务器上失败,gremlin,Gremlin,我正在使用Gremlin java,发现GroovyTranslator在$符号之前添加了额外的\, 这会导致查询无法在远程服务器上执行 GraphTraversal traversal = graph.addV().property("amount", "$1"); System.out.println(GroovyTranslator.of("g").translate(traversal.asAdmin().getBytecode

我正在使用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")
  • 如果这是GroovyTranslator的问题,我可以将
    \$
    替换为
    $
    ,但我不确定是否会有更多特殊字符出现此问题

  • 这会因为反斜杠而失败,但如果某些属性值想要使用反斜杠怎么办?
    在我看来,使用反斜杠总是失败的。
    我认为以下方法应该有效,但不能:

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

  • 在Groovy中,如果使用Groovy字符串(GStrings),美元符号具有特殊的含义。它用于指示插值应按以下方式进行:

    gremlin> a=3
    ==>3
    gremlin> "The number is $a"
    ==>The number is 3
    
    如果您连接的服务器使用Groovy原样解析查询,则需要反斜杠。如果服务器未按原样使用Groovy,则需要删除反斜杠


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

    这是否意味着如果服务器不使用Groovy,就无法使用反斜杠,我尝试了转义反斜杠“\\\”,查询失败我能够在连接到远程图形的测试查询中从Gremlin控制台使用反斜杠。