我有一个名为/tmp/scripts/a.gremlin的脚本,其中包含一个函数filterOver。
def filterOver(age) {
return g.V.filter{it.age > age}
}
我的rexster配置conf / rexster-cassandra.xml包含正确的扩展部分。
<extensions>
<allows>
<allow>tp:gremlin</allow>
</allows>
<extension>
<namespace>tp</namespace>
<name>gremlin</name>
<configuration>
<scripts>/tmp/scripts</scripts>
<allow-client-script>true</allow-client-script>
<cache-scripts>true</cache-scripts>
</configuration>
</extension>
</extensions>
我已经通过运行
启动了我的rexster服务器bin/titan.sh start
现在我执行
http://localhost:8182/graphs/graph/tp/gremlin?script=filterOver(30)&load=[a]
我得到了例外
{&#34;成功&#34;:false,&#34; api&#34;:{&#34;描述&#34;:&#34;评估特设Gremlin 图表的脚本。&#34;,&#34;参数&#34;:{&#34; rexster.showTypes&#34;:&#34;显示 具有本机数据类型的元素的属性(默认为 false)&#34;,&#34; load&#34;:&#34;&#39;存储过程列表&#39;在...之前执行 &#39;脚本&#39; (如果未指定脚本&#39;则指定最后一个脚本 参数将返回值&#34;,&#34; returnTotal&#34;:&#34;当设置为true时, 将迭代完整的结果集并返回结果(默认为 false)&#34;,&#34;语言&#34;:&#34;要使用的gremlin语言风格(默认为 groovy)&#34;,&#34; params&#34;:&#34;绑定到脚本的参数映射 引擎&#34;,&#34;脚本&#34;:&#34;格雷姆林脚本 评估&#34;,&#34; rexster.returnKeys&#34;:&#34;元素属性键的数组 return(默认是返回所有元素 属性)&#34;,&#34; rexster.offset.start&#34;:&#34;启动分页集的索引 要返回的数据&#34;,&#34; rexster.offset.end&#34;:&#34;分页集的结束索引 的数据 返回&#34;}},&#34;消息&#34;:&#34;&#34;&#34;错误&#34;:&#34; javax.script.ScriptException: groovy.lang.MissingMethodException:没有方法签名: com.tinkerpop.gremlin.groovy.jsr223.GremlinGroovyScriptEngine.filterOver() 适用于参数类型:(java.lang.Integer)值:[30]&#34;}
我也试过
http://localhost:8182/graphs/graph/tp/gremlin?params={%22age%22:30}&script=filterOver(age)&load=[a]
甚至以下
http://localhost:8182/graphs/graph/tp/gremlin?age=30&script=filterOver(age)&load=[a]
那么将参数传递给函数的正确方法是什么?
答案 0 :(得分:1)
我尝试了你的具体配置,它对我有用。您的rexster.xml
配置看起来似乎正确,a.gremlin
也是如此。将该脚本保留在/tmp/scripts
中似乎没有问题。这个与cURL的特定电话为我工作:
curl "http://localhost:8182/graphs/tinkergraph/tp/gremlin?script=filterOver(30)&load=\[a\]"
如果尝试使用cURL对您不起作用,我建议您简化您的装备,并尝试只下载Rexster本身。确保它可以正常工作,然后再使用Titan Server再次模拟。