Rexster将值传递给脚本中定义的函数

时间:2014-10-15 20:26:11

标签: titan rexster

我有一个名为/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]

那么将参数传递给函数的正确方法是什么?

1 个答案:

答案 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再次模拟。