Sunday 15 June 2014

Elasticsearch 1.3.2 java api setScript throws exception on execution -



Elasticsearch 1.3.2 java api setScript throws exception on execution -

in elasticsearch java api version 1.3.2, "setscript()" method not work default, examples given in elasticsearch home site. tried following, threw exception on execution.

updateresponse ur = null; map par = new hashmap(); par.put("nsite", "newfield"); par.put("docid", "56783"); ur = client.prepareupdate(index, type, id) .setscriptparams(par) .setscript("ctx._source.sites.nsite=docid",scriptservice.scripttype.inline) .execute().actionget(); system.out.println("updated "+site);

(note:- in latest version, elasticsearch requires 2 params "setscript" method) .setscript("ctx._source.sites.nsite=docid") => wrong method signature, script type mandatory param now.

on running got "execution exception" follows:

exception in thread "main" org.elasticsearch.transport.transportserializationexception: failed deserialize exception response stream @ org.elasticsearch.transport.netty.messagechannelhandler.handlerresponseerror(messagechannelhandler.java:173) @ org.elasticsearch.transport.netty.messagechannelhandler.messagereceived(messagechannelhandler.java:125) @ org.elasticsearch.common.netty.channel.simplechannelupstreamhandler.handleupstream(simplechannelupstreamhandler.java:70) @ org.elasticsearch.common.netty.channel.defaultchannelpipeline.sendupstream(defaultchannelpipeline.java:564) @ org.elasticsearch.common.netty.channel.defaultchannelpipeline$defaultchannelhandlercontext.sendupstream(defaultchannelpipeline.java:791) @ org.elasticsearch.common.netty.channel.channels.firemessagereceived(channels.java:296) @ org.elasticsearch.common.netty.handler.codec.frame.framedecoder.unfoldandfiremessagereceived(framedecoder.java:462) @ org.elasticsearch.common.netty.handler.codec.frame.framedecoder.calldecode(framedecoder.java:443) @ org.elasticsearch.common.netty.handler.codec.frame.framedecoder.messagereceived(framedecoder.java:310) @ org.elasticsearch.common.netty.channel.simplechannelupstreamhandler.handleupstream(simplechannelupstreamhandler.java:70) @ org.elasticsearch.common.netty.channel.defaultchannelpipeline.sendupstream(defaultchannelpipeline.java:564) @ org.elasticsearch.common.netty.channel.defaultchannelpipeline.sendupstream(defaultchannelpipeline.java:559) @ org.elasticsearch.common.netty.channel.channels.firemessagereceived(channels.java:268) @ org.elasticsearch.common.netty.channel.channels.firemessagereceived(channels.java:255) @ org.elasticsearch.common.netty.channel.socket.nio.nioworker.read(nioworker.java:88) @ org.elasticsearch.common.netty.channel.socket.nio.abstractnioworker.process(abstractnioworker.java:108) @ org.elasticsearch.common.netty.channel.socket.nio.abstractnioselector.run(abstractnioselector.java:318) @ org.elasticsearch.common.netty.channel.socket.nio.abstractnioworker.run(abstractnioworker.java:89) @ org.elasticsearch.common.netty.channel.socket.nio.nioworker.run(nioworker.java:178) @ org.elasticsearch.common.netty.util.threadrenamingrunnable.run(threadrenamingrunnable.java:108) @ org.elasticsearch.common.netty.util.internal.deadlockproofworker$1.run(deadlockproofworker.java:42) @ java.util.concurrent.threadpoolexecutor.runworker(threadpoolexecutor.java:1145) @ java.util.concurrent.threadpoolexecutor$worker.run(threadpoolexecutor.java:615) @ java.lang.thread.run(thread.java:722) caused by: java.io.streamcorruptedexception: unexpected end of block info @ java.io.objectinputstream.readobject0(objectinputstream.java:1369) @ java.io.objectinputstream.access$300(objectinputstream.java:205) @ java.io.objectinputstream$getfieldimpl.readfields(objectinputstream.java:2132) @ java.io.objectinputstream.readfields(objectinputstream.java:537) @ java.net.inetsocketaddress.readobject(inetsocketaddress.java:282) @ sun.reflect.nativemethodaccessorimpl.invoke0(native method) @ sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl.java:57) @ sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:43) @ java.lang.reflect.method.invoke(method.java:601) @ java.io.objectstreamclass.invokereadobject(objectstreamclass.java:1004) @ java.io.objectinputstream.readserialdata(objectinputstream.java:1872) @ java.io.objectinputstream.readordinaryobject(objectinputstream.java:1777) @ java.io.objectinputstream.readobject0(objectinputstream.java:1347) @ java.io.objectinputstream.defaultreadfields(objectinputstream.java:1970) @ java.io.objectinputstream.readserialdata(objectinputstream.java:1894) @ java.io.objectinputstream.readordinaryobject(objectinputstream.java:1777) @ java.io.objectinputstream.readobject0(objectinputstream.java:1347) @ java.io.objectinputstream.defaultreadfields(objectinputstream.java:1970) @ java.io.objectinputstream.readserialdata(objectinputstream.java:1894) @ java.io.objectinputstream.readordinaryobject(objectinputstream.java:1777) @ java.io.objectinputstream.readobject0(objectinputstream.java:1347) @ java.io.objectinputstream.readobject(objectinputstream.java:369) @ org.elasticsearch.transport.netty.messagechannelhandler.handlerresponseerror(messagechannelhandler.java:171) ... 23 more

it seems, script language default not groovy reason in newer versions of es. need provide explicitly. so, on providing script language worked now. (note:- setscriptlang("groovy") required param if groovy selection of script in es).

updateresponse ur = null; map par = new hashmap(); par.put("nsite", "newfield"); par.put("docid", "56783"); ur = client.prepareupdate(index, type, id) .setscriptlang("groovy") .setscriptparams(par) .setscript("ctx._source.sites.nsite=docid",scriptservice.scripttype.inline) .execute().actionget(); system.out.println("updated "+site);

java elasticsearch

No comments:

Post a Comment