How to update a object within array in elastic search

Here I have a array type field in my document of elastic search, like
below:-

"prog_lists": [
{
"description": "engineer",
"age": 25,
"name": "ashu"
},
{
"description": "programmer",
"age": 26,
"name": "rajit"
},
{
"description": "designer",
"age": 27,
"name": "naveen"
}
]

I want to update only those objects which satisfy any condition, like I want to query where name equals to ashu update his age to 30.

please suggest something....

Thanks in advance....

--
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+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/elasticsearch/1ed154d1-a441-46c9-bc37-82cc360ef7aa%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Use nested documents.

See
http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/nested-objects.html#nested-objects
http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-nested-type.html#mapping-nested-type

--
David Pilato | Technical Advocate | elasticsearch.com
david.pilato@elasticsearch.com
@dadoonet | @elasticsearchfr | @scrutmydocs

Le 7 octobre 2014 à 15:38:56, Rajit Garg (rajit.garg@daffodilsw.com) a écrit:

Here I have a array type field in my document of elastic search, like below:-

"prog_lists": [
{
"description": "engineer",
"age": 25,
"name": "ashu"
},
{
"description": "programmer",
"age": 26,
"name": "rajit"
},
{
"description": "designer",
"age": 27,
"name": "naveen"
}
]

I want to update only those objects which satisfy any condition, like I want to query where name equals to ashu update his age to 30.

please suggest something....

Thanks in advance....

--
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+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/elasticsearch/1ed154d1-a441-46c9-bc37-82cc360ef7aa%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

--
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+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/elasticsearch/etPan.5433eebd.2cd89a32.7bd4%40MacBook-Air-de-David.local.
For more options, visit https://groups.google.com/d/optout.

*I have seen the nested docs, and create mapping and getting mapping as
follow:- *

"fields": {
"type": "nested",
"properties": {
"_id": {
"type": "string"
},
"name": {
"type": "string"
}
}
}

where fields is my array containing

"fields": [
{
"_id": "1",
"name": "naveen"
},
{
"_id": "2",
"name": "rajit"
},
{
"_id": "3",
"name": "ashu"
}
]

Now I want to update and remove object from this array, and I am doing
this as follow:-

client.update({"index": "daffosw","type": "daffo","id": "2501","body": {
"script" : "for (int i = 0; i < ctx._source.fields.size(); i++){
if(ctx._source.fields[i]_id == id){
ctx._source.fields.remove(i);
}
}",
"params" : {
"id" : "1"
}
}}

but this will give this error

VerifyError[Bad type on operand stack
Exception Details:
Location:
ASMAccessorImpl_19994590841412749253560.getValue(Ljava/lang/Object;Ljava/lang/Object;Lorg/elasticsearch/common/mvel2/integration/VariableResolverFactory;)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_19994590841412749253560', 'java/lang/Object', 'java/lang/Object', 'org/elasticsearch/common/mvel2/integration/VariableResolverFactory' }
stack: { 'java/util/List', 'java/lang/Object' }
Bytecode:
0000000: 2d12 0eb9 0014 0200 b900 1901 00c0 001b
0000010: 121d b900 2102 00c0 001b 1223 b900 2102
0000020: 00c0 0025 2d12 27b9 0014 0200 b900 1901
0000030: 00b9 002a 0200 c000 1b12 2cb9 0021 0200
0000040: b0
]
Error: VerifyError[Bad type on operand stack..................

..............................

..................................

...................................

.....................................

................................

*then I am doing this *

client.update({"index": "daffosw","type": "daffo","id": "2501","body": {
"script" : "for (element : ctx._source['fields'].size()){
if(element._id == id){
element.name = 'Updated John';
}
}",
"params" : {
"id" : "1"
}
}}

and this is giving this error

ElasticsearchIllegalArgumentException[failed to execute script]; nested: PropertyAccessException[[Error: could not access: _id; in class: java.lang.Integer]

then I am doing this

client.update({"index": "daffosw","type": "daffo","id": "2501","body": {

"script" : "for (element : doc['fields'].values){ if(element._id == id){
element.name = 'Updated John'; } }", "params" : { "id" : "1" } }}

and this is giving this error

ElasticsearchIllegalArgumentException[failed to execute script]; nested: PropertyAccessException[[Error: unresolvable property or identifier: doc]

please help

On Tuesday, October 7, 2014 7:17:02 PM UTC+5:30, David Pilato wrote:

Use nested documents.

See

http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/nested-objects.html#nested-objects

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-nested-type.html#mapping-nested-type

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-nested-type.html#mapping-nested-type

--
David Pilato | Technical Advocate | elasticsearch.com
http://elasticsearch.com

david....@elasticsearch.com <javascript:>
@dadoonet https://twitter.com/dadoonet | @elasticsearchfr
https://twitter.com/elasticsearchfr | @scrutmydocs
http://twitter.com/scrutmydocs
https://twitter.com/scrutmydocs

Le 7 octobre 2014 à 15:38:56, Rajit Garg (rajit...@daffodilsw.com
<javascript:>) a écrit:

Here I have a array type field in my document of elastic search, like
below:-

"prog_lists": [
{
"description": "engineer",
"age": 25,
"name": "ashu"
},
{
"description": "programmer",
"age": 26,
"name": "rajit"
},
{
"description": "designer",
"age": 27,
"name": "naveen"
}
]

I want to update only those objects which satisfy any condition, like I want to query where name equals to ashu update his age to 30.

please suggest something....

Thanks in advance....

--
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 elasticsearc...@googlegroups.com <javascript:>.
To view this discussion on the web visit
https://groups.google.com/d/msgid/elasticsearch/1ed154d1-a441-46c9-bc37-82cc360ef7aa%40googlegroups.com
https://groups.google.com/d/msgid/elasticsearch/1ed154d1-a441-46c9-bc37-82cc360ef7aa%40googlegroups.com?utm_medium=email&utm_source=footer
.
For more options, visit https://groups.google.com/d/optout.

--
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+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/elasticsearch/894db422-23e9-44b2-9432-585bda23c73c%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

I have read the nested docs and create mapping and get mapping as follow

"fields": {
"type": "nested",
"properties": {
"_id": {
"type": "string"
},
"name": {
"type": "string"
}
}
}

where fields is my array contain the following

"fields": [
{
"_id": "1",
"name": "naveen"
},
{
"_id": "2",
"name": "rajit"
},
{
"_id": "3",
"name": "ashu"
}
]

I want to update and remove object from this array, and I am doing this,

client.update({"index": "daffosw","type": "daffo","id": "2501","body": {
"script" : "for (int i = 0; i < ctx._source.fields.size(); i++){
if(ctx._source.fields[i]_id == id){
ctx._source.fields[i].name = 'Updated John';
}
}",
"params" : {
"id" : "1"
}
}}

and I am getting this error

VerifyError[Bad type on operand stack
Exception Details:
Location:
ASMAccessorImpl_18539991071412750271920.getValue(Ljava/lang/Object;Ljava/lang/Object;Lorg/elasticsearch/common/mvel2/integration/VariableResolverFactory;)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_18539991071412750271920', 'java/lang/Object', 'java/lang/Object', 'org/elasticsearch/common/mvel2/integration/VariableResolverFactory' }
stack: { 'java/util/List', 'java/lang/Object' }............

.............................................................

.........................................................

then I have tried this

client.update({"index": "daffosw","type": "daffo","id": "2501","body": {
"script" : "for (int i = 0; i < ctx._source.fields.size(); i++){
if(ctx._source.fields[i]_id == id){
ctx._source.fields.remove(i);
}
}",
"params" : {
"id" : "1"
}
}}

and this is giving the same type of error

then I have tried

127.0.0.1:5000/rest/update?update={"index": "daffosw","type": "daffo","id": "2501","body": {
"script" : "for (element : doc['fields'].values){
if(element._id == id){
element.name = 'Updated John';
}
}",
"params" : {
"id" : "1"
}
}}

which gives this error

lasticsearchIllegalArgumentException[failed to execute script]; nested: PropertyAccessException[[Error: unresolvable property or identifier: doc]

please help....

On Tuesday, October 7, 2014 7:17:02 PM UTC+5:30, David Pilato wrote:

Use nested documents.

See

http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/nested-objects.html#nested-objects

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-nested-type.html#mapping-nested-type

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-nested-type.html#mapping-nested-type

--
David Pilato | Technical Advocate | elasticsearch.com
http://elasticsearch.com

david....@elasticsearch.com <javascript:>
@dadoonet https://twitter.com/dadoonet | @elasticsearchfr
https://twitter.com/elasticsearchfr | @scrutmydocs
http://twitter.com/scrutmydocs
https://twitter.com/scrutmydocs

Le 7 octobre 2014 à 15:38:56, Rajit Garg (rajit...@daffodilsw.com
<javascript:>) a écrit:

Here I have a array type field in my document of elastic search, like
below:-

"prog_lists": [
{
"description": "engineer",
"age": 25,
"name": "ashu"
},
{
"description": "programmer",
"age": 26,
"name": "rajit"
},
{
"description": "designer",
"age": 27,
"name": "naveen"
}
]

I want to update only those objects which satisfy any condition, like I want to query where name equals to ashu update his age to 30.

please suggest something....

Thanks in advance....

--
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 elasticsearc...@googlegroups.com <javascript:>.
To view this discussion on the web visit
https://groups.google.com/d/msgid/elasticsearch/1ed154d1-a441-46c9-bc37-82cc360ef7aa%40googlegroups.com
https://groups.google.com/d/msgid/elasticsearch/1ed154d1-a441-46c9-bc37-82cc360ef7aa%40googlegroups.com?utm_medium=email&utm_source=footer
.
For more options, visit https://groups.google.com/d/optout.

--
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+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/elasticsearch/35ee59f5-d769-4f54-ab0a-3d39e62f3820%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

I have read the nested docs and create mapping and get mapping as follow

"fields": {
"type": "nested",
"properties": {
"_id": {
"type": "string"
},
"name": {
"type": "string"
}
}
}

where fields is my array contain the following

"fields": [
{
"_id": "1",
"name": "naveen"
},
{
"_id": "2",
"name": "rajit"
},
{
"_id": "3",
"name": "ashu"
}
]

I want to update and remove object from this array, and I am doing this,

client.update({"index": "daffosw","type": "daffo","id": "2501","body": {
"script" : "for (int i = 0; i < ctx._source.fields.size(); i++){
if(ctx._source.fields[i]_id == id){
ctx._source.fields[i].name = 'Updated John';
}
}",
"params" : {
"id" : "1"
}
}}

and I am getting this error

VerifyError[Bad type on operand stack
Exception Details:
Location:

ASMAccessorImpl_18539991071412750271920.getValue(Ljava/lang/Object;Ljava/lang/Object;Lorg/elasticsearch/common/mvel2/integration/VariableResolverFactory;)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_18539991071412750271920',
'java/lang/Object', 'java/lang/Object',
'org/elasticsearch/common/mvel2/integration/VariableResolverFactory' }
stack: { 'java/util/List', 'java/lang/Object' }............
.............................................................
.........................................................

then I have tried this

client.update({"index": "daffosw","type": "daffo","id": "2501","body": {
"script" : "for (int i = 0; i < ctx._source.fields.size(); i++){
if(ctx._source.fields[i]_id == id){
ctx._source.fields.remove(i);
}
}",
"params" : {
"id" : "1"
}
}}

and this is giving the same type of error

then I have tried

client.update({"index": "daffosw","type": "daffo","id": "2501","body": {
"script" : "for (element : doc['fields'].values){
if(element._id == id){
element.name = 'Updated John';
}
}",
"params" : {
"id" : "1"
}
}}

which gives this error

elasticsearchIllegalArgumentException[failed to execute script]; nested:
PropertyAccessException[[Error: unresolvable property or identifier: doc]

please help....

On Tuesday, October 7, 2014 7:17:02 PM UTC+5:30, David Pilato wrote:

Use nested documents.

See

http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/nested-objects.html#nested-objects

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-nested-type.html#mapping-nested-type

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-nested-type.html#mapping-nested-type

--
David Pilato | Technical Advocate | elasticsearch.com
http://elasticsearch.com

david....@elasticsearch.com <javascript:>
@dadoonet https://twitter.com/dadoonet | @elasticsearchfr
https://twitter.com/elasticsearchfr | @scrutmydocs
http://twitter.com/scrutmydocs
https://twitter.com/scrutmydocs

Le 7 octobre 2014 à 15:38:56, Rajit Garg (rajit...@daffodilsw.com
<javascript:>) a écrit:

Here I have a array type field in my document of elastic search, like
below:-

"prog_lists": [
{
"description": "engineer",
"age": 25,
"name": "ashu"
},
{
"description": "programmer",
"age": 26,
"name": "rajit"
},
{
"description": "designer",
"age": 27,
"name": "naveen"
}
]

I want to update only those objects which satisfy any condition, like I want to query where name equals to ashu update his age to 30.

please suggest something....

Thanks in advance....

--
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 elasticsearc...@googlegroups.com <javascript:>.
To view this discussion on the web visit
https://groups.google.com/d/msgid/elasticsearch/1ed154d1-a441-46c9-bc37-82cc360ef7aa%40googlegroups.com
https://groups.google.com/d/msgid/elasticsearch/1ed154d1-a441-46c9-bc37-82cc360ef7aa%40googlegroups.com?utm_medium=email&utm_source=footer
.
For more options, visit https://groups.google.com/d/optout.

--
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+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/elasticsearch/a1f51260-3d2d-49ad-bcab-e3d481f62183%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

I have read the nested docs and create mapping and get mapping as follow

"fields": {
"type": "nested",
"properties": {
"_id": {
"type": "string"
},
"name": {
"type": "string"
}
}
}

where fields is my array contain the following

"fields": [
{
"_id": "1",
"name": "naveen"
},
{
"_id": "2",
"name": "rajit"
},
{
"_id": "3",
"name": "ashu"
}
]

I want to update and remove object from this array, and I am doing this,

client.update({"index": "daffosw","type": "daffo","id": "2501","body": {
"script" : "for (int i = 0; i < ctx._source.fields.size(); i++){
if(ctx._source.fields[i]_id == id){
ctx._source.fields[i].name = 'Updated John';
}
}",
"params" : {
"id" : "1"
}
}}

and I am getting this error

VerifyError[Bad type on operand stack
Exception Details:
Location:

ASMAccessorImpl_18539991071412750271920.getValue(Ljava/lang/Object;Ljava/lang/Object;Lorg/elasticsearch/common/mvel2/integration/VariableResolverFactory;)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_18539991071412750271920',
'java/lang/Object', 'java/lang/Object',
'org/elasticsearch/common/mvel2/integration/VariableResolverFactory' }
stack: { 'java/util/List', 'java/lang/Object' }............
.............................................................
.........................................................

then I have tried this

client.update({"index": "daffosw","type": "daffo","id": "2501","body": {
"script" : "for (int i = 0; i < ctx._source.fields.size(); i++){
if(ctx._source.fields[i]_id == id){
ctx._source.fields.remove(i);
}
}",
"params" : {
"id" : "1"
}
}}

and this is giving the same type of error

then I have tried

client.update({"index": "daffosw","type": "daffo","id": "2501","body": {
"script" : "for (element : doc['fields'].values){
if(element._id == id){
element.name = 'Updated John';
}
}",
"params" : {
"id" : "1"
}
}}

which gives this error

elasticsearchIllegalArgumentException[failed to execute script]; nested:
PropertyAccessException[[Error: unresolvable property or identifier: doc]

please help....

On Tuesday, October 7, 2014 7:08:52 PM UTC+5:30, Rajit Garg wrote:

Here I have a array type field in my document of elastic search, like
below:-

"prog_lists": [
{
"description": "engineer",
"age": 25,
"name": "ashu"
},
{
"description": "programmer",
"age": 26,
"name": "rajit"
},
{
"description": "designer",
"age": 27,
"name": "naveen"
}
]

I want to update only those objects which satisfy any condition, like I want to query where name equals to ashu update his age to 30.

please suggest something....

Thanks in advance....

--
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+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/elasticsearch/cc5e8892-9083-492e-834f-ac3be92abb06%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

I have read the nested docs and create mapping and get mapping as follow

"fields": {
"type": "nested",
"properties": {
"_id": {
"type": "string"
},
"name": {
"type": "string"
}
}
}

where fields is my array contain the following

"fields": [
{
"_id": "1",
"name": "naveen"
},
{
"_id": "2",
"name": "rajit"
},
{
"_id": "3",
"name": "ashu"
}
]

I want to update and remove object from this array, and I am doing this,

client.update({"index": "daffosw","type": "daffo","id": "2501","body": {
"script" : "for (int i = 0; i < ctx._source.fields.size(); i++){
if(ctx._source.fields[i]_id == id){
ctx._source.fields[i].name = 'Updated John';
}
}",
"params" : {
"id" : "1"
}
}}

and I am getting this error

VerifyError[Bad type on operand stack
Exception Details:
Location:

ASMAccessorImpl_18539991071412750271920.getValue(Ljava/lang/Object;Ljava/lang/Object;Lorg/elasticsearch/common/mvel2/integration/VariableResolverFactory;)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_18539991071412750271920',
'java/lang/Object', 'java/lang/Object',
'org/elasticsearch/common/mvel2/integration/VariableResolverFactory' }
stack: { 'java/util/List', 'java/lang/Object' }............
.............................................................
.........................................................

then I have tried this

client.update({"index": "daffosw","type": "daffo","id": "2501","body": {
"script" : "for (int i = 0; i < ctx._source.fields.size(); i++){
if(ctx._source.fields[i]_id == id){
ctx._source.fields.remove(i);
}
}",
"params" : {
"id" : "1"
}
}}

and this is giving the same type of error

then I have tried

client.update({"index": "daffosw","type": "daffo","id": "2501","body": {
"script" : "for (element : doc['fields'].values){
if(element._id == id){
element.name = 'Updated John';
}
}",
"params" : {
"id" : "1"
}
}}

which gives this error

elasticsearchIllegalArgumentException[failed to execute script]; nested:
PropertyAccessException[[Error: unresolvable property or identifier: doc]

please help....

On Tuesday, October 7, 2014 7:08:52 PM UTC+5:30, Rajit Garg wrote:

Here I have a array type field in my document of elastic search, like
below:-

"prog_lists": [
{
"description": "engineer",
"age": 25,
"name": "ashu"
},
{
"description": "programmer",
"age": 26,
"name": "rajit"
},
{
"description": "designer",
"age": 27,
"name": "naveen"
}
]

I want to update only those objects which satisfy any condition, like I want to query where name equals to ashu update his age to 30.

please suggest something....

Thanks in advance....

--
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+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/elasticsearch/ef9566bb-eebc-43e4-9a97-b8f832cf7e7d%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

*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, October 8, 2014 12:42:11 PM UTC+5:30, Rajit Garg wrote:

I have read the nested docs and create mapping and get mapping as follow

"fields": {
"type": "nested",
"properties": {
"_id": {
"type": "string"
},
"name": {
"type": "string"
}
}
}

where fields is my array contain the following

"fields": [
{
"_id": "1",
"name": "naveen"
},
{
"_id": "2",
"name": "rajit"
},
{
"_id": "3",
"name": "ashu"
}
]

I want to update and remove object from this array, and I am doing this,

client.update({"index": "daffosw","type": "daffo","id": "2501","body": {
"script" : "for (int i = 0; i < ctx._source.fields.size(); i++){
if(ctx._source.fields[i]_id == id){
ctx._source.fields[i].name = 'Updated John';
}
}",
"params" : {
"id" : "1"
}
}}

and I am getting this error

VerifyError[Bad type on operand stack
Exception Details:
Location:

ASMAccessorImpl_18539991071412750271920.getValue(Ljava/lang/Object;Ljava/lang/Object;Lorg/elasticsearch/common/mvel2/integration/VariableResolverFactory;)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_18539991071412750271920',
'java/lang/Object', 'java/lang/Object',
'org/elasticsearch/common/mvel2/integration/VariableResolverFactory' }
stack: { 'java/util/List', 'java/lang/Object' }............
.............................................................
.........................................................

then I have tried this

client.update({"index": "daffosw","type": "daffo","id": "2501","body": {
"script" : "for (int i = 0; i < ctx._source.fields.size(); i++){
if(ctx._source.fields[i]_id == id){
ctx._source.fields.remove(i);
}
}",
"params" : {
"id" : "1"
}
}}

and this is giving the same type of error

then I have tried

client.update({"index": "daffosw","type": "daffo","id": "2501","body": {
"script" : "for (element : doc['fields'].values){
if(element._id == id){
element.name = 'Updated John';
}
}",
"params" : {
"id" : "1"
}
}}

which gives this error

elasticsearchIllegalArgumentException[failed to execute script]; nested:
PropertyAccessException[[Error: unresolvable property or identifier: doc]

please help....

On Tuesday, October 7, 2014 7:08:52 PM UTC+5:30, Rajit Garg wrote:

Here I have a array type field in my document of elastic search, like
below:-

"prog_lists": [
{
"description": "engineer",
"age": 25,
"name": "ashu"
},
{
"description": "programmer",
"age": 26,
"name": "rajit"
},
{
"description": "designer",
"age": 27,
"name": "naveen"
}
]

I want to update only those objects which satisfy any condition, like I want to query where name equals to ashu update his age to 30.

please suggest something....

Thanks in advance....

--
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+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/elasticsearch/ec53ef95-6dbd-4c10-8354-ee52f4b68d7a%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

I have got my answer, and its solution is

POST /twitter/twit/1/_update

{
  "script": "item_to_remove = nil; foreach (item : ctx._source.list) { 

if (item['tweet_id'] == tweet_id) { item_to_remove=item; } } if
(item_to_remove != nil) ctx._source.list.remove(item_to_remove);",
"params": {"tweet_id": "123"}
}

if you have more than one item that matches the criteria, use a list
instead:

POST /twitter/twit/1/_update
{
  "script": "items_to_remove = []; foreach (item : ctx._source.list) { 

if (item['tweet_id'] == tweet_id) { items_to_remove.add(item); } } foreach
(item : items_to_remove) {ctx._source.list.remove(item);}",
"params": {"tweet_id": "123"}
}

On Tuesday, June 24, 2014 12:48:17 PM UTC+5:30, Madhumita Sadhukhan wrote:

I have a requirement where I need to update(not append) existing values
within a list or array in Elastic Search.
Is this feature supported in elastic search?

For eg:

I have a field called jobs as part of my document

"jobs": [
{
"status": "InProgress",
"runId": 1,
"start_date": 2101112,
"orderId": "undefined"
},
{
"status": "InProgress",
"runId": 2,
"start_date": 2101112,
"orderId": "undefined"
},
],
and I am required to update the orderId for each job run to different
values.
Currently I am only able to append a job but I cannot update the
attributes of each job later.
Is this usecase supported and possible in Elastic Search?

On Wednesday, October 8, 2014 4:44:45 PM UTC+5:30, Rajit Garg wrote:

*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, October 8, 2014 12:42:11 PM UTC+5:30, Rajit Garg wrote:

I have read the nested docs and create mapping and get mapping as follow

"fields": {
"type": "nested",
"properties": {
"_id": {
"type": "string"
},
"name": {
"type": "string"
}
}
}

where fields is my array contain the following

"fields": [
{
"_id": "1",
"name": "naveen"
},
{
"_id": "2",
"name": "rajit"
},
{
"_id": "3",
"name": "ashu"
}
]

I want to update and remove object from this array, and I am doing this,

client.update({"index": "daffosw","type": "daffo","id": "2501","body": {
"script" : "for (int i = 0; i < ctx._source.fields.size(); i++){
if(ctx._source.fields[i]_id == id){
ctx._source.fields[i].name = 'Updated John';
}
}",
"params" : {
"id" : "1"
}
}}

and I am getting this error

VerifyError[Bad type on operand stack
Exception Details:
Location:

ASMAccessorImpl_18539991071412750271920.getValue(Ljava/lang/Object;Ljava/lang/Object;Lorg/elasticsearch/common/mvel2/integration/VariableResolverFactory;)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_18539991071412750271920',
'java/lang/Object', 'java/lang/Object',
'org/elasticsearch/common/mvel2/integration/VariableResolverFactory' }
stack: { 'java/util/List', 'java/lang/Object' }............
.............................................................
.........................................................

then I have tried this

client.update({"index": "daffosw","type": "daffo","id": "2501","body": {
"script" : "for (int i = 0; i < ctx._source.fields.size(); i++){
if(ctx._source.fields[i]_id == id){
ctx._source.fields.remove(i);
}
}",
"params" : {
"id" : "1"
}
}}

and this is giving the same type of error

then I have tried

client.update({"index": "daffosw","type": "daffo","id": "2501","body": {
"script" : "for (element : doc['fields'].values){
if(element._id == id){
element.name = 'Updated John';
}
}",
"params" : {
"id" : "1"
}
}}

which gives this error

elasticsearchIllegalArgumentException[failed to execute script]; nested:
PropertyAccessException[[Error: unresolvable property or identifier: doc]

please help....

On Tuesday, October 7, 2014 7:08:52 PM UTC+5:30, Rajit Garg wrote:

Here I have a array type field in my document of elastic search, like
below:-

"prog_lists": [
{
"description": "engineer",
"age": 25,
"name": "ashu"
},
{
"description": "programmer",
"age": 26,
"name": "rajit"
},
{
"description": "designer",
"age": 27,
"name": "naveen"
}
]

I want to update only those objects which satisfy any condition, like I want to query where name equals to ashu update his age to 30.

please suggest something....

Thanks in advance....

--
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+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/elasticsearch/50df0c6f-e570-4f5b-b3f3-a47e74fdc8c8%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.