# Groovy scripts to painless

**URL:** <https://discuss.elastic.co/t/groovy-scripts-to-painless/75471>\
**Category:** Elasticsearch\
**Created:** [February 17, 2017, 10:17am UTC](https://discuss.elastic.co/t/groovy-scripts-to-painless/75471 "2017-02-17T10:17:25Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![living\_jordi](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/living_jordi/32/61363_2.png) [@living\_jordi](https://discuss.elastic.co/u/living_jordi)\
**Post date:** [February 17, 2017, 10:17am UTC](https://discuss.elastic.co/t/groovy-scripts-to-painless/75471/1 "2017-02-17T10:17:25Z")

</div>

I wrote this script using groovy language (`datediff.groovy`):

```
(doc[secondDateField].date.millis - doc[firstDateField].date.millis) / 3600000

```

It works fine. Nevertheless, I'm intended to move these script to `painless` (`datediff.painless`). Nevertheless, I'm getting compilation error on straup:

```
[esn1] failed to load/compile script [datediff]: {
   "type" : "script_exception",
   "reason" : "compile error",
   "caused_by" : {
     "type" : "illegal_argument_exception",
     "reason" : "Variable [secondDateField] is not defined."
   },
   "script_stack" : [
     "(doc[secondDateField].date.mil ...",
     " ^---- HERE"
   ],
   "script" : "(doc[secondDateField].date.millis - doc[firstDateField].date.millis) / 3600000",
   "lang" : "painless"
}

```

It's telling me `secondDateField` is not defined. Could you help me in order to get it?

---

<div class="post-metadata">

**Author:** ![Mark\_Harwood](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/mark_harwood/32/10538_2.png) [@Mark\_Harwood](https://discuss.elastic.co/u/Mark_Harwood)\
**Post date:** [February 17, 2017, 12:44pm UTC](https://discuss.elastic.co/t/groovy-scripts-to-painless/75471/2 "2017-02-17T12:44:52Z")

</div>

Try quotes around field names as per [https://www.elastic.co/guide/en/elasticsearch/reference/master/modules-scripting-painless.html#\_accessing\_doc\_values\_from\_painless](https://www.elastic.co/guide/en/elasticsearch/reference/master/modules-scripting-painless.html#_accessing_doc_values_from_painless)

---

<div class="post-metadata">

**Author:** ![living\_jordi](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/living_jordi/32/61363_2.png) [@living\_jordi](https://discuss.elastic.co/u/living_jordi)\
**Post date:** [February 17, 2017, 1:09pm UTC](https://discuss.elastic.co/t/groovy-scripts-to-painless/75471/3 "2017-02-17T13:09:26Z")

</div>

`seconfDateField` is not a literal is a variable that acts as a script parameter.

The issue is how to get the content of this parameter in order to index the document.

---

<div class="post-metadata">

**Author:** ![Mark\_Harwood](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/mark_harwood/32/10538_2.png) [@Mark\_Harwood](https://discuss.elastic.co/u/Mark_Harwood)\
**Post date:** [February 17, 2017, 1:23pm UTC](https://discuss.elastic.co/t/groovy-scripts-to-painless/75471/4 "2017-02-17T13:23:13Z")

</div>

params.secondDateField

---

<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 17, 2017, 1:23pm UTC](https://discuss.elastic.co/t/groovy-scripts-to-painless/75471/5 "2017-03-17T13:23:29Z")

</div>

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