"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 [email protected].
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.