# Unique Array Elements in Painless Script

**URL:** <https://discuss.elastic.co/t/unique-array-elements-in-painless-script/66519>\
**Category:** Elasticsearch\
**Created:** [November 18, 2016, 10:32am UTC](https://discuss.elastic.co/t/unique-array-elements-in-painless-script/66519 "2016-11-18T10:32:17Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![LeFinc](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/lefinc/32/13279_2.png) [@LeFinc](https://discuss.elastic.co/u/LeFinc)\
**Post date:** [November 18, 2016, 10:32am UTC](https://discuss.elastic.co/t/unique-array-elements-in-painless-script/66519/1 "2016-11-18T10:32:17Z")

</div>

Hello!

I'm looking for a way to use Update API with painless script to turn the following record:

```
{
    "foo": [6,3,4,4,8,4,2,1]
}

```

into

```
{
    "foo": [1,2,3,4,6,8]
}

```

In other words, I would like to extract unique elements in field "foo", sort them, and replace the original field contents. How do I do this? Is there a comprehensive list of painless array functions that would be at least relatively up-to-date? I'm aware that it's still a language in development. Thanks!

### Non-working examples - do not use

So far, I have tried a few different ideas, such as:

To sort:

> {  
> "script" : {  
> "inline": "ctx.\_source.foo=ctx.\_source.foo.sort()"  
> }  
> }

To get unique:

> {  
> "script" : {  
> "inline": "ctx.\_source.foo=ctx.\_source.foo.unique()"  
> }  
> }

To get unique (fingers crossed, thinking Java 8):

> {  
> "script" : {  
> "inline": "ctx.\_source.foo=ctx.\_source.foo.distinct()"  
> }  
> }

---

<div class="post-metadata">

**Author:** ![LeFinc](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/lefinc/32/13279_2.png) [@LeFinc](https://discuss.elastic.co/u/LeFinc)\
**Post date:** [November 18, 2016, 10:46am UTC](https://discuss.elastic.co/t/unique-array-elements-in-painless-script/66519/2 "2016-11-18T10:46:38Z")

</div>

Sorted the sorting part, this seems to work

```
{
	"script" : {
		"inline": "ctx._source.foo=
                                 ctx._source.foo.stream().sorted()
                                        .collect(Collectors.toList())"
	}
}
```

---

<div class="post-metadata">

**Author:** ![LeFinc](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/lefinc/32/13279_2.png) [@LeFinc](https://discuss.elastic.co/u/LeFinc)\
**Post date:** [November 18, 2016, 10:49am UTC](https://discuss.elastic.co/t/unique-array-elements-in-painless-script/66519/3 "2016-11-18T10:49:02Z")

</div>

And the final answer, unique and sorting:

```
{
	"script" : {
		"inline": "ctx._source.foo=
                               ctx._source.foo.stream().distinct().sorted()
                                          .collect(Collectors.toList())"
	}
}

```

Hope that helped somebody!

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [December 16, 2016, 10:49am UTC](https://discuss.elastic.co/t/unique-array-elements-in-painless-script/66519/4 "2016-12-16T10:49:49Z")

</div>

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
