You can't do it with elasticsearch but you could try this plugin: 
https://github.com/yakaz/elasticsearch-action-updatebyquery

HTH

--
David ;-)
Twitter : @dadoonet / @elasticsearchfr / @scrutmydocs


Le 31 août 2014 à 20:22, [email protected] a écrit :

Hey 

I figured it out, but it leads me on to another question.

So the way to execute a script over a list of elements is as follows:

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"
  }
}

My next question: how can I query the index to find all matching documents with 
say "tweet_id": "123" and then execute the script on only those documents?

When I tried 
.. query..
{
   "filter": {
     "script": "foreach (item : ctx._source.list) {if (item['tweet_id'] == 
tweet_id) { item['new_field'] = 'ghi'; }  }",
  "params": {
    "tweet_id": "123"
  }
}
}
I got an error saying property : ctx : unresolvable

Thanks.

> On Friday, August 29, 2014 10:33:23 AM UTC+1, [email protected] wrote:
> Hi
> Say I have a list of elements like this:
> 
> PUT twitter/twit/1
> {
>    "list": [
>            {
>               "a": "b",
>               "c": "d",
>               "e": "f"
>             },
>             {
>               "1": "2",
>               "3": "4"
>             }
>         ]
> }
> 
> And I want to change the value of "e" (currently "f") to say "new_f " such 
> that the document looks like:
> 
> {
>    "list": [
>            {
>               "a": "b",
>               "c": "d",
>               "e": "new_f"
>             },
>             {
>               "1": "2",
>               "3": "4"
>             }
>         ]
> }
> 
> Is there a way to do this ? Maybe in MVEL ?
> 
> Do I match on document
>            {
>               "a": "b",
>               "c": "d",
>               "e": "f"
>             }
> 
> ie if list.contains(document) { some kind of update; }  // is this possible ?
> 
> 
> I know MVEL is being deprecated in 1.4 however it will do for now.
> 
> I want to use bulk request.
> 
> I know it's possible to remove the element like this:
> bulkRequestBuilder.setScript("if (ctx._source.list.contains(document)) 
> {ctx._source.list.remove(document)} }").setScriptParams etc
> 
> 
> but is it possible to "update" a field in the document also ?
> 
> 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/5c641a4e-a02f-4ebe-972f-cd2a320d15d4%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 [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/elasticsearch/234C2E37-8860-4015-84A3-6326C27DA17F%40pilato.fr.
For more options, visit https://groups.google.com/d/optout.

Reply via email to