简体   繁体   English

使用 elasticsearch 编写 Groovy 脚本

[英]Groovy Scripting with elasticsearch

my groovy script is something like this code:我的 groovy 脚本类似于以下代码:

def value=DynamicValue     
def Nvalue=NewValue
def field=Fieldvalue
def prod

NewValue=NewValue.toInteger()
prod=doc[''+DynamicValue+''].value*NewValue         
if(._source.doc[''+Fieldvalue+''].value != null) {
    ._source.doc[''+Fieldvalue+''].value=prod
}

I am trying to update the value of a field in my elasticsearch index like我正在尝试更新我的弹性搜索索引中的字段值,例如

._source.doc[''+Fieldvalue+''].value=prod

where AVG_PRICE_PER_UNIT is a field in my index.其中 AVG_PRICE_PER_UNIT 是我索引中的一个字段。

But when i am exceuting it from java i get但是当我从 Java 执行它时,我得到了

  "reason" : {
            "type" : "script_exception",
            "reason" : "failed to run file script [fieldScript] using lang [groovy]",
            "caused_by" : {
              "type" : "illegal_argument_exception",
              "reason" : "argument type mismatch"
            }

is there any solution??

My Java code:我的Java代码:

Map<String, Object> params = ImmutableMap.of("DynamicValue",AggregateValue_First, "NewValue", AggregateValue_Second, "Fieldvalue",hash); 
try { 
    SearchResponse Se = client.prepareSearch(indexName) 
        .addScriptField("checkValue", new Script("fieldScript", ScriptType.FILE, "groovy", params))
        .execute().actionGet(); 
        System.out.println(Se.toString()); 
} catch(RuntimeException e) { 
    e.printStackTrace(); 
}

my log shows我的日志显示

 if (._source.doc[''+Fieldvalue+''] != null) {_source.doc[''+Fieldvalue+''].value=prod} ^

1 error ]; 1个错误]; at org.elasticsearch.script.groovy.GroovyScriptEngineService.compile(GroovyScriptEngineService.java:198) at org.elasticsearch.script.ScriptService$ScriptChangesListener.onFileInit(ScriptService.java:549) at org.elasticsearch.script.ScriptService$ScriptChangesListener.onFileChanged(ScriptService.java:580) at org.elasticsearch.watcher.FileWatcher$FileObserver.onFileChanged(FileWatcher.java:279) at org.elasticsearch.watcher.FileWatcher$FileObserver.checkAndNotify(FileWatcher.java:131) at org.elasticsearch.watcher.FileWatcher$FileObserver.updateChildren(FileWatcher.java:215) at org.elasticsearch.watcher.FileWatcher$FileObserver.checkAndNotify(FileWatcher.java:117) at org.elasticsearch.watcher.FileWatcher.doCheckAndNotify(FileWatcher.java:70) at org.elasticsearch.watcher.AbstractResourceWatcher.checkAndNotify(AbstractResourceWatcher.java:44) at org.elasticsearch.watcher.ResourceWatcherService$ResourceMonitor.run(ResourceWatcherService.java:187) at org.elasticsearch.threadpool.ThreadPool$Log在 org.elasticsearch.script.groovy.GroovyScriptEngineService.compile(GroovyScriptEngineService.java:198) 在 org.elasticsearch.script.ScriptService$ScriptChangesListener.onFileInit(ScriptService.java:549) 在 org.elasticsearch.script.ScriptService$ScriptChangesListener.onFileChanged (ScriptService.java:580) 在 org.elasticsearch.watcher.FileWatcher$FileObserver.onFileChanged(FileWatcher.java:279) 在 org.elasticsearch.watcher.FileWatcher$FileObserver.checkAndNotify(FileWatcher.java:131) 在 org.elasticsearch。 watcher.FileWatcher$FileObserver.updateChildren(FileWatcher.java:215) 在 org.elasticsearch.watcher.FileWatcher$FileObserver.checkAndNotify(FileWatcher.java:117) 在 org.elasticsearch.watcher.FileWatcher.doCheckAndNotify(FileWatcher.java:70)在 org.elasticsearch.watcher.AbstractResourceWatcher.checkAndNotify(AbstractResourceWatcher.java:44) 在 org.elasticsearch.watcher.ResourceWatcherService$ResourceMonitor.run(ResourceWatcherService.java:187) 在 org.elasticsearch.threadpool.ThreadPool$Log gingRunnable.run(ThreadPool.java:640) at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) at java.util.concurrent.FutureTask.runAndReset(Unknown Source) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(Unknown Source) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source) Caused by: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: 895843a31627edca5a53c198e26b4f4b13aa65c5: 26: unexpected token: . gingRunnable.run(ThreadPool.java:640) at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) at java.util.concurrent.FutureTask.runAndReset(Unknown Source) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask .access$301(Unknown Source) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run( Unknown Source) at java.lang.Thread.run(Unknown Source) 引起:org.codehaus.groovy.control.MultipleCompilationErrorsException:启动失败:895843a31627edca5a53c198e26b4f4b13aa65c5:26:意外令牌:. @ line 26, column 7. @ 第 26 行,第 7 列。

You have a typo in your script, change it to this:您的脚本中有错字,请将其更改为:

def value=DynamicValue     
def Nvalue=NewValue
def field=Fieldvalue
def prod

NewValue=NewValue.toInteger()
prod=ctx._source[DynamicValue].value * NewValue         
if(ctx._source[Fieldvalue].value != null) {
    ctx._source[Fieldvalue].value=prod
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM