# Passing parameters to Painless script

**URL:** <https://discuss.elastic.co/t/passing-parameters-to-painless-script/74936>\
**Category:** Elasticsearch\
**Created:** [February 13, 2017, 10:49pm UTC](https://discuss.elastic.co/t/passing-parameters-to-painless-script/74936 "2017-02-13T22:49:14Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![Leo\_Li](https://avatars.discourse-cdn.com/v4/letter/l/ebca7d/32.png) [@Leo\_Li](https://discuss.elastic.co/u/Leo_Li)\
**Post date:** [February 13, 2017, 10:49pm UTC](https://discuss.elastic.co/t/passing-parameters-to-painless-script/74936/1 "2017-02-13T22:49:14Z")

</div>

Hi,

Can anyone please explain to me how to use painless file script with parameters? I'm using Elasticsearch 5.x.

I created a very simple script under config/scripts folder called: calculate\_distance.painless, the content of this file is:  
doc[field\_name].arcDistance(latitude,longitude)

field\_name, latitude, longitude are parameters.

However as soon as I start Elasticsearch, I saw compilation error on this script: Variable [field\_name] is not defined

Why should I define the variable as it supposed to be parameters to be passed in?

Then I tried to define a dummy variable for field\_name, latitude, longitude by:  
String field\_name;  
Float latitude;  
Float longitude;

And run the query, I got error:  
u'caused\_by': {u'reason': None, u'type': u'null\_pointer\_exception'}, u'reason': u'runtime error', u'type': u'script\_exception'}

How can I use painless file script with parameters in Elasticsearch?

---

<div class="post-metadata">

**Author:** ![Leo\_Li](https://avatars.discourse-cdn.com/v4/letter/l/ebca7d/32.png) [@Leo\_Li](https://discuss.elastic.co/u/Leo_Li)\
**Post date:** [February 13, 2017, 11:59pm UTC](https://discuss.elastic.co/t/passing-parameters-to-painless-script/74936/2 "2017-02-13T23:59:50Z")

</div>

It seems I cannot even do it via inline script, so below query works:  
query = {  
"query": {  
"match\_all":{}  
},  
"script\_fields": {  
"distance": {  
"script":{  
"lang":"painless",  
"inline":"doc['address\_details.location.point'].arcDistance(-38.376465,144.829099)"  
}  
}  
}  
}

Below query doesn't work because I use params:  
query = {  
"query": {  
"match\_all":{}  
},  
"script\_fields": {  
"distance": {  
"script":{  
"lang":"painless",  
"inline":"doc['address\_details.location.point'].arcDistance(latitude,longitude)",  
"params":{  
"latitude":-38.376465,  
"longitude":144.829099  
}  
}  
}  
}  
}  
The error msg is : TransportError(500, u'search\_phase\_execution\_exception', u'compile error')

---

<div class="post-metadata">

**Author:** ![peterdm](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/peterdm/32/15589_2.png) [@peterdm](https://discuss.elastic.co/u/peterdm)\
**Post date:** [February 16, 2017, 4:08pm UTC](https://discuss.elastic.co/t/passing-parameters-to-painless-script/74936/3 "2017-02-16T16:08:45Z")

</div>

Seems like they've namespaced the params underneath "params", and not documented it.

Try `doc['address_details.location.point'].arcDistance(params.latitude, params.longitude)`

---

<div class="post-metadata">

**Author:** ![Leo\_Li](https://avatars.discourse-cdn.com/v4/letter/l/ebca7d/32.png) [@Leo\_Li](https://discuss.elastic.co/u/Leo_Li)\
**Post date:** [February 16, 2017, 10:22pm UTC](https://discuss.elastic.co/t/passing-parameters-to-painless-script/74936/4 "2017-02-16T22:22:05Z")

</div>

Thank you, this sovled the problem.

---

<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:** [March 16, 2017, 10:22pm UTC](https://discuss.elastic.co/t/passing-parameters-to-painless-script/74936/5 "2017-03-16T22:22:15Z")

</div>

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