# Help using the Trim function

**URL:** https://discuss.elastic.co/t/help-using-the-trim-function/163046
**Category:** Kibana
**Created:** [January 5, 2019, 11:08am UTC](https://discuss.elastic.co/t/help-using-the-trim-function/163046 "2019-01-05T11:08:13Z")
**Posts on this page:** 9
**Page:** 1

<div class="post-metadata">

### Author: ![LoZio](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/lozio/32/25946_2.png) [@LoZio](https://discuss.elastic.co/u/LoZio)
#### Post date: [January 5, 2019, 11:08am UTC](https://discuss.elastic.co/t/help-using-the-trim-function/163046/1 "2019-01-05T11:08:13Z")

</div>

I thought it was a simple task, but I'm having a problem trying to trim a field.  
I have the City field in my index, it contains "MyCity", "blank\_spaceMyCity", "Mycityblank\_space" so I tried to apply the trim funcion in a painless scripted field, like

doc['City.keyword'].value.trim()

This returns just nothing in the field test and throws errors in Discover. Removing the trim() part I get the city names as expected, but with surrounding spaces of course.  
I found no useful doc around or examples.  
How do I use the trim function?  
Using 6.5.  
Thanks

---

<div class="post-metadata">

### Author: ![Marius\_Dragomir](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/marius_dragomir/32/42087_2.png) [@Marius\_Dragomir](https://discuss.elastic.co/u/Marius_Dragomir)
#### Post date: [January 7, 2019, 10:41am UTC](https://discuss.elastic.co/t/help-using-the-trim-function/163046/2 "2019-01-07T10:41:25Z")

</div>

Are you getting any errors in your ES logs? Also, can you check that the field types are set OK? as trim will only work on strings.  
That is the correct syntax for the trim function and I just tried it on 6.6.0 and it was fine.

---

<div class="post-metadata">

### Author: ![LoZio](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/lozio/32/25946_2.png) [@LoZio](https://discuss.elastic.co/u/LoZio)
#### Post date: [January 7, 2019, 11:04am UTC](https://discuss.elastic.co/t/help-using-the-trim-function/163046/3 "2019-01-07T11:04:55Z")

</div>

I'm pretty sure the city is a string field. See this example. I created "trim\_field" without the trim function applied, the test is:

 ![image](https://us1.discourse-cdn.com/elastic/original/3X/a/8/a8e9783303601dc49c1632793230450a59c66015.png)  
You can see the countries on the right, this is fine. I add the trim function and get:  
 ![image](https://us1.discourse-cdn.com/elastic/original/3X/9/0/90b0d461c40aa0e25c72f25d1f30b3bae9a705a2.png)  
No visible errors here.

---

<div class="post-metadata">

### Author: ![LoZio](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/lozio/32/25946_2.png) [@LoZio](https://discuss.elastic.co/u/LoZio)
#### Post date: [January 7, 2019, 11:11am UTC](https://discuss.elastic.co/t/help-using-the-trim-function/163046/4 "2019-01-07T11:11:09Z")

</div>

In the log I found:

> [2019-01-07T12:03:32,957][DEBUG][o.e.a.s.TransportSearchAction] [oiZDz7D] [609645] Failed to execute fetch phase  
> org.elasticsearch.transport.RemoteTransportException: [oiZDz7D][127.0.0.1:9300][indices:data/read/search[phase/fetch/id]]  
> Caused by: org.elasticsearch.script.ScriptException: runtime error  
> at org.elasticsearch.painless.PainlessScript.convertToScriptException(PainlessScript.java:94) ~[?:?]  
> at org.elasticsearch.painless.PainlessScript$Script.execute(doc['Country.keyword'].value.trim() ...:29) ~[?:?]  
> at org.elasticsearch.painless.ScriptImpl.run(ScriptImpl.java:104) ~[?:?]  
> at org.elasticsearch.search.fetch.subphase.ScriptFieldsFetchSubPhase.hitsExecute(ScriptFieldsFetchSubPhase.java:67) ~[elasticsearch-6.5.4.jar:6.5.4]  
> at org.elasticsearch.search.fetch.FetchPhase.execute(FetchPhase.java:167) ~[elasticsearch-6.5.4.jar:6.5.4]  
> at org.elasticsearch.search.SearchService.lambda$executeFetchPhase$3(SearchService.java:556) ~[elasticsearch-6.5.4.jar:6.5.4]  
> at org.elasticsearch.search.SearchService$3.doRun(SearchService.java:361) [elasticsearch-6.5.4.jar:6.5.4]  
> at org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingAbstractRunnable.doRun(ThreadContext.java:723) [elasticsearch-6.5.4.jar:6.5.4]  
> at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37) [elasticsearch-6.5.4.jar:6.5.4]  
> at org.elasticsearch.common.util.concurrent.TimedRunnable.doRun(TimedRunnable.java:41) [elasticsearch-6.5.4.jar:6.5.4]  
> at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37) [elasticsearch-6.5.4.jar:6.5.4]  
> at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0\_191]  
> at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0\_191]  
> at java.lang.Thread.run(Thread.java:748) [?:1.8.0\_191]  
> Caused by: java.lang.IllegalArgumentException: dynamic getter [java.lang.String, trim] not found  
> at org.elasticsearch.painless.Def.lookupGetter(Def.java:395) ~[?:?]  
> at org.elasticsearch.painless.DefBootstrap$PIC.lookup(DefBootstrap.java:154) ~[?:?]  
> at org.elasticsearch.painless.DefBootstrap$PIC.fallback(DefBootstrap.java:208) ~[?:?]  
> at org.elasticsearch.painless.PainlessScript$Script.execute(doc['Country.keyword'].value.trim ...:29) ~[?:?]  
> at org.elasticsearch.painless.ScriptImpl.run(ScriptImpl.java:104) ~[?:?]  
> at org.elasticsearch.search.fetch.subphase.ScriptFieldsFetchSubPhase.hitsExecute(ScriptFieldsFetchSubPhase.java:67) ~[elasticsearch-6.5.4.jar:6.5.4]  
> at org.elasticsearch.search.fetch.FetchPhase.execute(FetchPhase.java:167) ~[elasticsearch-6.5.4.jar:6.5.4]  
> at org.elasticsearch.search.SearchService.lambda$executeFetchPhase$3(SearchService.java:556) ~[elasticsearch-6.5.4.jar:6.5.4]  
> at org.elasticsearch.search.SearchService$3.doRun(SearchService.java:361) ~[elasticsearch-6.5.4.jar:6.5.4]  
> at org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingAbstractRunnable.doRun(ThreadContext.java:723) ~[elasticsearch-6.5.4.jar:6.5.4]  
> at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37) ~[elasticsearch-6.5.4.jar:6.5.4]  
> at org.elasticsearch.common.util.concurrent.TimedRunnable.doRun(TimedRunnable.java:41) ~[elasticsearch-6.5.4.jar:6.5.4]  
> at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37) ~[elasticsearch-6.5.4.jar:6.5.4]  
> at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) ~[?:1.8.0\_191]  
> at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ~[?:1.8.0\_191]  
> at java.lang.Thread.run(Thread.java:748) ~[?:1.8.0\_191]

Running  
java version "1.8.0\_191"  
Java(TM) SE Runtime Environment (build 1.8.0\_191-b12)  
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)  
on Ubuntu 16

---

<div class="post-metadata">

### Author: ![Marius\_Dragomir](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/marius_dragomir/32/42087_2.png) [@Marius\_Dragomir](https://discuss.elastic.co/u/Marius_Dragomir)
#### Post date: [January 7, 2019, 11:22am UTC](https://discuss.elastic.co/t/help-using-the-trim-function/163046/5 "2019-01-07T11:22:22Z")

</div>

![trim](https://us1.discourse-cdn.com/elastic/original/3X/f/d/fde1fdbea03c8e8af233c270dad4b28b9ddb8e4e.png)

> [@LoZio](#):
>
> Caused by: java.lang.IllegalArgumentException: dynamic getter [java.lang.String, trim] not found

This looks weird. I presume you are setting the script type as painless, as default. That should be OK.  
I'll have to refer somebody from ES team to this issue.

---

<div class="post-metadata">

### Author: ![LoZio](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/lozio/32/25946_2.png) [@LoZio](https://discuss.elastic.co/u/LoZio)
#### Post date: [January 7, 2019, 12:02pm UTC](https://discuss.elastic.co/t/help-using-the-trim-function/163046/6 "2019-01-07T12:02:56Z")

</div>

Yes, painless scripting and string as in your pic above. I just added "Title case" transform at the end, since I have mixed "City", "city", "CITY" and so on. (Same for country and other details... bad data collection)

---

<div class="post-metadata">

### Author: ![Jack\_Conradson](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/jack_conradson/32/47236_2.png) [@Jack\_Conradson](https://discuss.elastic.co/u/Jack_Conradson)
#### Post date: [January 7, 2019, 8:40pm UTC](https://discuss.elastic.co/t/help-using-the-trim-function/163046/7 "2019-01-07T20:40:08Z")

</div>

@LoZio The error that is occurring would happen if the script was run as the following: `doc['Country.keyword'].value.trim`

Is it possible the script was run this way previously? (without parens for the trim method)

---

<div class="post-metadata">

### Author: ![LoZio](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/lozio/32/25946_2.png) [@LoZio](https://discuss.elastic.co/u/LoZio)
#### Post date: [January 8, 2019, 7:42am UTC](https://discuss.elastic.co/t/help-using-the-trim-function/163046/8 "2019-01-08T07:42:01Z")

</div>

Hi Jack, the images are from the actual run that generated the logs so the parenthesis are there

---

<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: [February 5, 2019, 7:42am UTC](https://discuss.elastic.co/t/help-using-the-trim-function/163046/9 "2019-02-05T07:42:04Z")

</div>

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