【问题标题】:Inline Script error内联脚本错误
【发布时间】:2016-09-26 10:29:31
【问题描述】:

我正在尝试使用内联脚本运行更新 api,我的代码是

 client.prepareUpdate("result",typeName, "1")
       .setScript(new  Script("ctx._source.gender=doc['"+AggregateValue_First+"'].value*doc['"+AggregateValue_Second+"'].value",ScriptType.INLINE, null, null))
       .get();

当我执行它时,我得到了

java.lang.IllegalArgumentException: failed to execute script

我的日志看起来像

 Caused by: ScriptException[failed to run inline script
 [ctx._source.gender =
 doc['AVG_PRICE_PER_UNIT'].value*doc['NUMBER_OF_UNITS'].value] using
 lang [groovy]]; nested:
 NotSerializableExceptionWrapper[missing_property_exception: No such
property: doc for class: af9b76c11012333a0eeba6af6df35125322f36b8];
    at
 org.elasticsearch.script.groovy.GroovyScriptEngineService$GroovyScript.run(GroovyScriptEngineService.java:320)
    at
 org.elasticsearch.action.update.UpdateHelper.executeScript(UpdateHelper.java:252)... 14 more



 Caused by: NotSerializableExceptionWrapper[missing_property_exception:
 No such property: doc for class:
 af9b76c11012333a0eeba6af6df35125322f36b8]  at
 org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:53)
    at
 org.codehaus.groovy.vmplugin.v7.IndyGuardsFiltersAndSignatures.unwrap(IndyGuardsFiltersAndSignatures.java:177)
    at
 org.codehaus.groovy.vmplugin.v7.IndyInterface.selectMethod(IndyInterface.java:228)
    at
 af9b76c11012333a0eeba6af6df35125322f36b8.run(af9b76c11012333a0eeba6af6df35125322f36b8:1)
    at
 org.elasticsearch.script.groovy.GroovyScriptEngineService$GroovyScript$1.run(GroovyScriptEngineService.java:313)
    at java.security.AccessController.doPrivileged(Native Method)   at
 org.elasticsearch.script.groovy.GroovyScriptEngineService$GroovyScript.run(GroovyScriptEngineService.java:310)
    ... 15 more

有人可以帮我解决这个问题吗?

我试过了

client.prepareUpdate("result",typeName,"1").setScript(newScript("ctx._source.gender.value = ctx._source['"+AggregateValue_First+"'].value * ctx._source['"+AggregateValue_Second+"'].value", ScriptType.INLINE, null, null)) .get();

现在错误类似于

log4j:WARN 找不到记录器的附加程序 (org.elasticsearch.node)。 log4j:WARN 请初始化 log4j 系统正常。 log4j:WARN 见 http://logging.apache.org/log4j/1.2/faq.html#noconfig 了解更多信息。 java.lang.IllegalArgumentException:未能执行脚本 org.elasticsearch.action.update.UpdateHelper.executeScript(UpdateHelper.java:257) 在 org.elasticsearch.action.update.UpdateHelper.prepare(UpdateHelper.java:197) 在 org.elasticsearch.action.update.UpdateHelper.prepare(UpdateHelper.java:80) 在 org.elasticsearch.action.update.TransportUpdateAction.shardOperation(TransportUpdateAction.java:174) 在 org.elasticsearch.action.update.TransportUpdateAction.shardOperation(TransportUpdateAction.java:168) 在 org.elasticsearch.action.update.TransportUpdateAction.shardOperation(TransportUpdateAction.java:66) 在 org.elasticsearch.action.support.single.instance.TransportInstanceSingleOperationAction$ShardTransportHandler.messageReceived(TransportInstanceSingleOperationAction.java:244) 在 org.elasticsearch.action.support.single.instance.TransportInstanceSingleOperationAction$ShardTransportHandler.messageReceived(TransportInstanceSingleOperationAction.java:240) 在 org.elasticsearch.transport.TransportRequestHandler.messageReceived(TransportRequestHandler.java:33) 在 org.elasticsearch.transport.RequestHandlerRegistry.processMessageReceived(RequestHandlerRegistry.java:75) 在 org.elasticsearch.transport.netty.MessageChannelHandler$RequestHandler.doRun(MessageChannelHandler.java:300) 在 org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(未知来源) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(未知来源) 在 java.lang.Thread.run(Unknown Source) 引起: ScriptException [未能运行内联脚本 [ctx._source.gender.value = ctx._source['AVG_PRICE_PER_UNIT'].value * ctx._source['5'].value] 使用 lang [groovy]];嵌套:AssertionError[BUG!未捕获的异常: 成员是私有的:java.lang.Integer.value/int/getField,来自 org.codehaus.groovy.vmplugin.v7.IndyInterface];嵌套: NotSerializableExceptionWrapper [illegal_access_exception:成员是 私有:java.lang.Integer.value/int/getField,来自 org.codehaus.groovy.vmplugin.v7.IndyInterface];在 org.elasticsearch.script.groovy.GroovyScriptEngineService$GroovyScript.run(GroovyScriptEngineService.java:320) 在 org.elasticsearch.action.update.UpdateHelper.executeScript(UpdateHelper.java:252) ... 14 更多原因:java.lang.AssertionError:BUG!未捕获 例外:成员是私有的:java.lang.Integer.value/int/getField, 来自 org.codehaus.groovy.vmplugin.v7.IndyInterface 的 org.codehaus.groovy.vmplugin.v7.Selector$PropertySelector.chooseMeta(Selector.java:311) 在 org.codehaus.groovy.vmplugin.v7.Selector$MethodSelector.setCallSiteTarget(Selector.java:954) 在 org.codehaus.groovy.vmplugin.v7.IndyInterface.selectMethod(IndyInterface.java:224) 在 a45669ea4b74cc2cb4371072fd14ab69cb5dd5f6.run(a45669ea4b74cc2cb4371072fd14ab69cb5dd5f6:1) 在 org.elasticsearch.script.groovy.GroovyScriptEngineService$GroovyScript$1.run(GroovyScriptEngineService.java:313) 在 java.security.AccessController.doPrivileged(Native Method) 在 org.elasticsearch.script.groovy.GroovyScriptEngineService$GroovyScript.run(GroovyScriptEngineService.java:310) ... 15 更多原因: NotSerializableExceptionWrapper [illegal_access_exception:成员是 私有:java.lang.Integer.value/int/getField,来自 org.codehaus.groovy.vmplugin.v7.IndyInterface] 在 java.lang.invoke.MemberName.makeAccessException(未知来源)在 java.lang.invoke.MethodHandles$Lookup.checkAccess(Unknown Source) at java.lang.invoke.MethodHandles$Lookup.checkField(Unknown Source) at java.lang.invoke.MethodHandles$Lookup.getDirectFieldCommon(未知 来源)在 java.lang.invoke.MethodHandles$Lookup.getDirectFieldNoSecurityManager(未知 来源)在 java.lang.invoke.MethodHandles$Lookup.unreflectField(未知来源) 在 java.lang.invoke.MethodHandles$Lookup.unreflectGetter(未知 来源)在 org.codehaus.groovy.vmplugin.v7.Selector$PropertySelector.chooseMeta(Selector.java:302) ... 21 更多

【问题讨论】:

    标签: elasticsearch groovy


    【解决方案1】:

    试试这个(即使用ctx._source 而不是doc):

    client.prepareUpdate("result",typeName, "1")
       .setScript(new  Script("ctx._source.gender = ctx._source['"+AggregateValue_First+"'] * ctx._source['"+AggregateValue_Second+"']", ScriptType.INLINE, null, null))
       .get();
    

    【讨论】:

    • 现在我得到 AssertionError[BUG!未捕获的异常:成员是私有的:java.lang.Integer.value/int/getField
    • ctx._source.gender.value重试(以上更新)
    • 还是一样的@Val
    • 你能把完整的错误粘贴到你的问题中吗?
    • 我已经改了@Val
    猜你喜欢
    • 1970-01-01
    • 2010-09-23
    • 1970-01-01
    • 2011-06-26
    • 2018-07-30
    • 1970-01-01
    • 2022-01-18
    • 2014-07-14
    • 2016-01-05
    相关资源
    最近更新 更多