# Script quering with Painless scripts

**URL:** <https://discuss.elastic.co/t/script-quering-with-painless-scripts/141792>\
**Category:** Elasticsearch\
**Created:** [July 26, 2018, 2:15pm UTC](https://discuss.elastic.co/t/script-quering-with-painless-scripts/141792 "2018-07-26T14:15:19Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Jevgenij](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/jevgenij/32/33543_2.png) [@Jevgenij](https://discuss.elastic.co/u/Jevgenij)\
**Post date:** [July 26, 2018, 2:15pm UTC](https://discuss.elastic.co/t/script-quering-with-painless-scripts/141792/1 "2018-07-26T14:15:19Z")

</div>

Hi!

Have tried a lot of things, like Java `Instant.now().toEpochMilli()` or joda `Days().toStandardDuration()` with no success.

Found out what while Java [Instant](https://docs.oracle.com/javase/8/docs/api/?java/time/Instant.html) class isn't accepted, Java [System.currentTimeMillis()](https://docs.oracle.com/javase/6/docs/api/java/lang/System.html#currentTimeMillis()) is.

My last try was:

```
"script":{
    "script":{
        "source":"doc['activated'].value.addDays(doc['duration']).getMillis() > System.currentTimeMillis()",
        "lang":"painless"
    }
}

```

But it fails with:

```
            "reason": {
                "type": "script_exception",
                "reason": "runtime error",
                "script_stack": [
                    "doc['activated'].value.addDays(doc['duration']).getMillis() > System.currentTimeMillis()",
                    " ^---- HERE"
                ],
                "script": "doc['activated'].value.addDays(doc['duration']).getMillis() > System.currentTimeMillis()",
                "lang": "painless",
                "caused_by": {
                    "type": "illegal_argument_exception",
                    "reason": "Unable to find dynamic method [addDays] with [1] arguments for class [org.joda.time.MutableDateTime]."
                }
            }

```

Here joda [.getMillis()](http://joda-time.sourceforge.net/apidocs/org/joda/time/base/BaseDateTime.html#getMillis()) method is found and works as expected, while joda [.addDays()](http://joda-time.sourceforge.net/apidocs/org/joda/time/MutableDateTime.html#addDays(int)) method isn't found.

Feel so confused which Java and joda classes and methods are accepted with Script Queries, and how to accomplish my task.

---

<div class="post-metadata">

**Author:** ![Jevgenij](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/jevgenij/32/33543_2.png) [@Jevgenij](https://discuss.elastic.co/u/Jevgenij)\
**Post date:** [July 26, 2018, 2:54pm UTC](https://discuss.elastic.co/t/script-quering-with-painless-scripts/141792/2 "2018-07-26T14:54:21Z")

</div>

Ok, got it to work with:

```
"script":{
	"script":{
		"source":"doc['activated'].value.getMillis() + doc['duration'].value*24*60*60*1000 > System.currentTimeMillis()",
		"lang":"painless"
	}
}

```

But it's not a nice solution.

And while [scripting docs](https://www.elastic.co/guide/en/elasticsearch/painless/6.3/painless-lang-spec.html) refers to Java SE 8 Language Specification, Java `TimeUnit.DAYS.toMillis()` is not available for usage with `"reason": "Variable [TimeUnit] is not defined."`. And there is a lot of similar situations: some methods can be used, some - can't.

Is there an explanation for that? Am I missing something? Did I misunderstood Java classes and methods usage?

---

<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:** [August 23, 2018, 2:54pm UTC](https://discuss.elastic.co/t/script-quering-with-painless-scripts/141792/3 "2018-08-23T14:54:25Z")

</div>

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