# Substring and contains in painless

**URL:** <https://discuss.elastic.co/t/substring-and-contains-in-painless/176294>\
**Category:** Elasticsearch\
**Created:** [April 10, 2019, 8:33pm UTC](https://discuss.elastic.co/t/substring-and-contains-in-painless/176294 "2019-04-10T20:33:36Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![Jravella](https://avatars.discourse-cdn.com/v4/letter/j/ac8455/32.png) [@Jravella](https://discuss.elastic.co/u/Jravella)\
**Post date:** [April 10, 2019, 8:33pm UTC](https://discuss.elastic.co/t/substring-and-contains-in-painless/176294/1 "2019-04-10T20:33:36Z")

</div>

i have a internal uri which has one of values like /appname/api/v4/bdq/rules/ i want to filter them a nd extract only field v4 from that url using substring function

---

<div class="post-metadata">

**Author:** ![spinscale](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/spinscale/32/25011_2.png) [@spinscale](https://discuss.elastic.co/u/spinscale)\
**Post date:** [April 11, 2019, 2:40pm UTC](https://discuss.elastic.co/t/substring-and-contains-in-painless/176294/2 "2019-04-11T14:40:48Z")

</div>

hey,

please dont add a second post only 5 hours after posting the first, just wait for an answer and bump the same post after some time. Note that this forum does not come with an SLA, yet we try to answer as many questions as possible 🙂

So in this case, you can take a look at painless regular expressions and use `split` to extract that part from the URL. See [https://www.elastic.co/guide/en/elasticsearch/painless/7.0/painless-examples.html](https://www.elastic.co/guide/en/elasticsearch/painless/7.0/painless-examples.html)

hope this helps!

--Alex

---

<div class="post-metadata">

**Author:** ![Jravella](https://avatars.discourse-cdn.com/v4/letter/j/ac8455/32.png) [@Jravella](https://discuss.elastic.co/u/Jravella)\
**Post date:** [April 11, 2019, 5:18pm UTC](https://discuss.elastic.co/t/substring-and-contains-in-painless/176294/3 "2019-04-11T17:18:46Z")

</div>

I dont see split function working for me.

---

<div class="post-metadata">

**Author:** ![spinscale](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/spinscale/32/25011_2.png) [@spinscale](https://discuss.elastic.co/u/spinscale)\
**Post date:** [April 11, 2019, 5:24pm UTC](https://discuss.elastic.co/t/substring-and-contains-in-painless/176294/4 "2019-04-11T17:24:43Z")

</div>

a bit more information would be useful, like the error you are getting and also the input you are using it on.

---

<div class="post-metadata">

**Author:** ![Jravella](https://avatars.discourse-cdn.com/v4/letter/j/ac8455/32.png) [@Jravella](https://discuss.elastic.co/u/Jravella)\
**Post date:** [April 11, 2019, 8:52pm UTC](https://discuss.elastic.co/t/substring-and-contains-in-painless/176294/5 "2019-04-11T20:52:09Z")

</div>

i have an endpoint uri which looks like /appname/api/v4/bdq/rules/

1)extract v\* from all uri and display their counts

---

<div class="post-metadata">

**Author:** ![spinscale](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/spinscale/32/25011_2.png) [@spinscale](https://discuss.elastic.co/u/spinscale)\
**Post date:** [April 12, 2019, 5:27pm UTC](https://discuss.elastic.co/t/substring-and-contains-in-painless/176294/6 "2019-04-12T17:27:02Z")

</div>

I asked for more information, your second reply does not contain any error messages or how the split function is not working - can you elaborate? I know what you want to do, but I would like to see some code that shows how you are using the split function.

---

<div class="post-metadata">

**Author:** ![Jravella](https://avatars.discourse-cdn.com/v4/letter/j/ac8455/32.png) [@Jravella](https://discuss.elastic.co/u/Jravella)\
**Post date:** [April 12, 2019, 7:27pm UTC](https://discuss.elastic.co/t/substring-and-contains-in-painless/176294/7 "2019-04-12T19:27:07Z")

</div>

looking for something like this

def path = doc['internalUri.keyword'].contains('v\*');  
/_which will retrieve all paths which contains word v3,v2,v1_/  
if (path != null) {  
return path.Substring(1,23);  
abstract only v3 from path  
}  
return "";  
but not working

error:

"root\_cause": [  
{  
"type": "script\_exception",  
"reason": "runtime error",  
"script\_stack": [  
"return path.Substring(1,23);\n }\n",  
" ^---- HERE"  
],  
"script": "def path = doc['internalUri.keyword'].contains('v3');\nif (path != null) {\n return path.Substring(1,23);\n }\nreturn "";",  
"lang": "painless"  
}  
],

---

<div class="post-metadata">

**Author:** ![spinscale](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/spinscale/32/25011_2.png) [@spinscale](https://discuss.elastic.co/u/spinscale)\
**Post date:** [April 12, 2019, 8:11pm UTC](https://discuss.elastic.co/t/substring-and-contains-in-painless/176294/8 "2019-04-12T20:11:13Z")

</div>

again, the context is important. Please provide a **full reprodicble** example. I have no idea in which context this script is used. If it is a script query, it should only return a boolean. Therefore the **full** stack trace is important.

---

<div class="post-metadata">

**Author:** ![Jravella](https://avatars.discourse-cdn.com/v4/letter/j/ac8455/32.png) [@Jravella](https://discuss.elastic.co/u/Jravella)\
**Post date:** [April 12, 2019, 8:30pm UTC](https://discuss.elastic.co/t/substring-and-contains-in-painless/176294/9 "2019-04-12T20:30:03Z")

</div>

Sorry Alex it is a painless script which was found in documentation

1. [https://www.elastic.co/blog/using-painless-kibana-scripted-fields](https://www.elastic.co/blog/using-painless-kibana-scripted-fields)

what i was trying to accomplish was get all strings which was word v3 in parsed field which has value like  
.... /appname/api/v3/bdq/rules/  
.../appname/api/v3/internal/rules/

---

<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:** [May 10, 2019, 8:30pm UTC](https://discuss.elastic.co/t/substring-and-contains-in-painless/176294/10 "2019-05-10T20:30:07Z")

</div>

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