Re: delete/update nested documents with elasticsearch Java API
Thanks this is working On Tuesday, October 28, 2014 8:40:12 AM UTC+5:30, shar...@gmail.com wrote: script: removeObjects = new java.util.ArrayList(); foreach (item : ctx._source.list) {if (item['tweet_id'] == tweet_id) {removeObjects.add(item) } } for(removeObject:removeObjects){ctx._source.list.remove(removeObject);}, 2014년 10월 8일 수요일 오후 8시 12분 55초 UTC+9, Rajit Garg 님의 말: Hey *I figured it out, I am able to update but I am not able to remove object that satisfies the condition* PUT twitter/twit/1 { list: [ { tweet_id: 1, a: b }, { tweet_id: 123, a: f } ] } POST /twitter/twit/1/_update { script: foreach (item : ctx._source.list) {if (item['tweet_id'] == tweet_id) { item['new_field'] = 'ghi'; } }, params: { tweet_id: 123 } } *this is working* *for remove i am doing this* POST /twitter/twit/1/_update { script: foreach (item : ctx._source.list) {if (item['tweet_id'] == tweet_id) {ctx._source.list.remove(item); } }, params: { tweet_id: 123 } } *but this is not working and giving this error, * ElasticsearchIllegalArgumentException[failed to execute script]; nested: ConcurrentModificationException; Error: ElasticsearchIllegalArgumentException[failed to execute script]; nested: ConcurrentModificationException; .. ... *please help* On Wednesday, April 10, 2013 12:22:14 PM UTC+5:30, Andrei Tolnai wrote: Hello. I use *Elastic Search Java API *for basic *CRUD *operations on ES documents; with *root type* documents it is working fine. However when I want to delete a nested document, I don't know how to use the *Java API* and scripting that *Elastic Search *provides. I have the following *root type* document which has in it a nested *users *property (nested document). { customer: { _all : {enabled : false}, _source : {enabled : true}, store : true, properties: { location : { type: string, store: yes, index:not_analyzed }, comments : { type: string, store: yes, index:not_analyzed }, * users:* * {* * type:nested,* * store:yes, * * properties:* *{* * _id : { type:string, store:yes, index:not_analyzed },* * name : { type:string, store:yes, index:not_analyzed },* * birthDate : { type:date, store:yes, index:not_analyzed }* *}* * }* } } } If I want to add a user I do the following in *Java */ *Scala *code: val json = {\_id\:\1\,\name\:\Anthony\,\birthDate\:\2013-04-10T06:45:26.186Z\} val updateRequest = new UpdateRequest(indexName, customer, customerId) updateRequest.script( if (ctx._source.users == null) { ctx._source.users = +json+ } else { ctx._source.users += +json+ } ) This works OK for adding nested *users *AKA updating the *customer root type* document. How is it to be done for *deleting* or *updating *a specific user ID from the nested *users* nested document? Thanks! -- You received this message because you are subscribed to the Google Groups elasticsearch group. To unsubscribe from this group and stop receiving emails from it, send an email to elasticsearch+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/elasticsearch/a4ccc10c-a06e-4c47-b486-8fdd1da4bfa3%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.
Re: delete/update nested documents with elasticsearch Java API
script: removeObjects = new java.util.ArrayList(); foreach (item : ctx._source.list) {if (item['tweet_id'] == tweet_id) {removeObjects.add(item) } } for(removeObject:removeObjects){ctx._source.list.remove(removeObject);}, 2014년 10월 8일 수요일 오후 8시 12분 55초 UTC+9, Rajit Garg 님의 말: Hey *I figured it out, I am able to update but I am not able to remove object that satisfies the condition* PUT twitter/twit/1 { list: [ { tweet_id: 1, a: b }, { tweet_id: 123, a: f } ] } POST /twitter/twit/1/_update { script: foreach (item : ctx._source.list) {if (item['tweet_id'] == tweet_id) { item['new_field'] = 'ghi'; } }, params: { tweet_id: 123 } } *this is working* *for remove i am doing this* POST /twitter/twit/1/_update { script: foreach (item : ctx._source.list) {if (item['tweet_id'] == tweet_id) {ctx._source.list.remove(item); } }, params: { tweet_id: 123 } } *but this is not working and giving this error, * ElasticsearchIllegalArgumentException[failed to execute script]; nested: ConcurrentModificationException; Error: ElasticsearchIllegalArgumentException[failed to execute script]; nested: ConcurrentModificationException; .. ... *please help* On Wednesday, April 10, 2013 12:22:14 PM UTC+5:30, Andrei Tolnai wrote: Hello. I use *Elastic Search Java API *for basic *CRUD *operations on ES documents; with *root type* documents it is working fine. However when I want to delete a nested document, I don't know how to use the *Java API* and scripting that *Elastic Search *provides. I have the following *root type* document which has in it a nested *users *property (nested document). { customer: { _all : {enabled : false}, _source : {enabled : true}, store : true, properties: { location : { type: string, store: yes, index:not_analyzed }, comments : { type: string, store: yes, index:not_analyzed }, * users:* * {* * type:nested,* * store:yes, * * properties:* *{* * _id : { type:string, store:yes, index:not_analyzed },* * name : { type:string, store:yes, index:not_analyzed },* * birthDate : { type:date, store:yes, index:not_analyzed }* *}* * }* } } } If I want to add a user I do the following in *Java */ *Scala *code: val json = {\_id\:\1\,\name\:\Anthony\,\birthDate\:\2013-04-10T06:45:26.186Z\} val updateRequest = new UpdateRequest(indexName, customer, customerId) updateRequest.script( if (ctx._source.users == null) { ctx._source.users = +json+ } else { ctx._source.users += +json+ } ) This works OK for adding nested *users *AKA updating the *customer root type* document. How is it to be done for *deleting* or *updating *a specific user ID from the nested *users* nested document? Thanks! -- You received this message because you are subscribed to the Google Groups elasticsearch group. To unsubscribe from this group and stop receiving emails from it, send an email to elasticsearch+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/elasticsearch/8ef09dca-306d-4fa7-8936-a20e86125dac%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.
Re: delete/update nested documents with elasticsearch Java API
Hey *I figured it out, I am able to update but I am not able to remove object that satisfies the condition* PUT twitter/twit/1 { list: [ { tweet_id: 1, a: b }, { tweet_id: 123, a: f } ] } POST /twitter/twit/1/_update { script: foreach (item : ctx._source.list) {if (item['tweet_id'] == tweet_id) { item['new_field'] = 'ghi'; } }, params: { tweet_id: 123 } } *this is working* *for remove i am doing this* POST /twitter/twit/1/_update { script: foreach (item : ctx._source.list) {if (item['tweet_id'] == tweet_id) {ctx._source.list.remove(item); } }, params: { tweet_id: 123 } } *but this is not working and giving this error, * ElasticsearchIllegalArgumentException[failed to execute script]; nested: ConcurrentModificationException; Error: ElasticsearchIllegalArgumentException[failed to execute script]; nested: ConcurrentModificationException; .. ... *please help* On Wednesday, April 10, 2013 12:22:14 PM UTC+5:30, Andrei Tolnai wrote: Hello. I use *Elastic Search Java API *for basic *CRUD *operations on ES documents; with *root type* documents it is working fine. However when I want to delete a nested document, I don't know how to use the *Java API* and scripting that *Elastic Search *provides. I have the following *root type* document which has in it a nested *users *property (nested document). { customer: { _all : {enabled : false}, _source : {enabled : true}, store : true, properties: { location : { type: string, store: yes, index:not_analyzed }, comments : { type: string, store: yes, index:not_analyzed }, * users:* * {* * type:nested,* * store:yes, * * properties:* *{* * _id : { type:string, store:yes, index:not_analyzed },* * name : { type:string, store:yes, index:not_analyzed },* * birthDate : { type:date, store:yes, index:not_analyzed }* *}* * }* } } } If I want to add a user I do the following in *Java */ *Scala *code: val json = {\_id\:\1\,\name\:\Anthony\,\birthDate\:\2013-04-10T06:45:26.186Z\} val updateRequest = new UpdateRequest(indexName, customer, customerId) updateRequest.script( if (ctx._source.users == null) { ctx._source.users = +json+ } else { ctx._source.users += +json+ } ) This works OK for adding nested *users *AKA updating the *customer root type* document. How is it to be done for *deleting* or *updating *a specific user ID from the nested *users* nested document? Thanks! -- You received this message because you are subscribed to the Google Groups elasticsearch group. To unsubscribe from this group and stop receiving emails from it, send an email to elasticsearch+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/elasticsearch/171950f9-5843-4327-be49-b6858e1b3832%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.
Re: delete/update nested documents with elasticsearch Java API
Hi, I have tried to update or remove the nested object in the same way as suggested , but this is not working I am doing this client.update({index: daffosw,type: daffo,id: 2501,body: { script : for (int i = 0; i ctx._source.users.size(); i++){ if(ctx._source.users[i]_id == id){ ctx._source.users[i].name = 'Updated John'; } }, params : { id : 1 } }} my users field contain the following users: [ { code: abcd, _id: 1, name: naveen }, { code: efgh, _id: 2, name: rajit }, { code: ijkl, _id: 3, name: ashu } ] and I am getting this error VerifyError[Bad type on operand stack Exception Details: Location: ASMAccessorImpl_11232799721412745799160.setValue(Ljava/lang/Object;Ljava/lang/Object;Lorg/elasticsearch/common/mvel2/integration/VariableResolverFactory;Ljava/lang/Object;)Ljava/lang/Object; @49: invokeinterface Reason: Type 'java/lang/Object' (current frame, stack[1]) is not assignable to integer Current Frame: bci: @49 flags: { } locals: { 'ASMAccessorImpl_11232799721412745799160', 'java/lang/Object', 'java/lang/Object', 'org/elasticsearch/common/mvel2/integration/VariableResolverFactory', 'java/lang/Object' } stack: { 'java/util/List', 'java/lang/Object' } Bytecode: 000: 2d12 0eb9 0014 0200 b900 1a01 00c0 001c 010: 121e b900 2202 00c0 001c 1224 b900 2202 020: 00c0 0026 2d12 28b9 0014 0200 b900 1a01 030: 00b9 002b 0200 c000 2d12 2f19 04b6 0035 040: 1904 b0 ] Error: VerifyError[Bad type on operand stack Exception Details: Location: - - On Friday, April 12, 2013 1:16:33 AM UTC+5:30, Martijn v Groningen wrote: Hi Andrei, I think the following should work: script : for (int i = 0; i ctx._source.users.size(); i++){if(ctx._source.users[i]._id == id){ctx._source.users.remove(i);i--;}} I added: 'i--'. Once an entry is removed, the list has been shorter and we shouldn't skip over the next entry. Martijn On 11 April 2013 18:04, Andrei Tolnai dre...@gmail.com javascript: wrote: Oddly enough the DELETE script seems to be working if in the array there is only one user with a particular given *id*. :-) If I have multiple users with the same *_id* value the script is not removing all of them. How should the script be changed to remove all the users that have a specific *_id* value? Regards. -- Met vriendelijke groet, Martijn van Groningen -- You received this message because you are subscribed to the Google Groups elasticsearch group. To unsubscribe from this group and stop receiving emails from it, send an email to elasticsearch+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/elasticsearch/5671672d-cc4e-451b-93a6-e40b574ea467%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.