# Scripted fields throwing error

**URL:** <https://discuss.elastic.co/t/scripted-fields-throwing-error/194555>\
**Category:** Elasticsearch\
**Created:** [August 9, 2019, 7:02am UTC](https://discuss.elastic.co/t/scripted-fields-throwing-error/194555 "2019-08-09T07:02:24Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![elk11](https://avatars.discourse-cdn.com/v4/letter/e/45deac/32.png) [@elk11](https://discuss.elastic.co/u/elk11)\
**Post date:** [August 9, 2019, 7:02am UTC](https://discuss.elastic.co/t/scripted-fields-throwing-error/194555/1 "2019-08-09T07:02:24Z")

</div>

I have few scripted fields which are causing error post migrations from 5x to 7.0.0.

Then i noticed in breaking changes that i need to include a check like below to confirm if the fields exist:

`A document doesn't have a value for a field! Use doc[<field>].size()==0 to check if a document is missing a field!`

My script:

```
if (doc['key1'].size() == 0 || doc['key2'].size() == 0 || doc['key3'].size() == 0) {
  return ''
}
return (doc['key1'].value + doc['key2'].value + doc['key3'].value ) /3

```

But when i did that, i started getting different error like below:

```
Caused by: org.elasticsearch.script.ScriptException: runtime error
        at org.elasticsearch.painless.PainlessScript.convertToScriptException(PainlessScript.java:94) ~[?:?]
        at org.elasticsearch.painless.PainlessScript$Script.execute(if (doc['key1'].size() == 0 && doc['key2'].size() == 0 && doc['key3:569) ~[?:?]
        at org.elasticsearch.search.fetch.subphase.ScriptFieldsFetchSubPhase.hitsExecute(ScriptFieldsFetchSubPhase.java:67) ~[elasticsearch-7.0.0.jar:7.0.0]
        at org.elasticsearch.search.fetch.FetchPhase.execute(FetchPhase.java:177) ~[elasticsearch-7.0.0.jar:7.0.0]
        at org.elasticsearch.search.SearchService.lambda$executeFetchPhase$3(SearchService.java:540) ~[elasticsearch-7.0.0.jar:7.0.0]
        at org.elasticsearch.search.SearchService$3.doRun(SearchService.java:380) ~[elasticsearch-7.0.0.jar:7.0.0]
        at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37) ~[elasticsearch-7.0.0.jar:7.0.0]
        at org.elasticsearch.common.util.concurrent.TimedRunnable.doRun(TimedRunnable.java:41) ~[elasticsearch-7.0.0.jar:7.0.0]
        at org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingAbstractRunnable.doRun(ThreadContext.java:751) ~[elasticsearch-7.0.0.jar:7.0.0]
        at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37) ~[elasticsearch-7.0.0.jar:7.0.0]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[?:?]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[?:?]
        at java.lang.Thread.run(Thread.java:835) [?:?]
Caused by: java.lang.IllegalArgumentException: No field found for [key1] in mapping with types []
        at org.elasticsearch.painless.PainlessScript$Script.execute(if (doc['key1'].size() == 0 || doc['key2'].size() == 0 && doc['key3...:9) ~[?:?]
        at org.elasticsearch.search.fetch.subphase.ScriptFieldsFetchSubPhase.hitsExecute(ScriptFieldsFetchSubPhase.java:67) ~[elasticsearch-7.0.0.jar:7.0.0]
        at org.elasticsearch.s
        at org.elasticsearch.search.SearchService$3.doRun(SearchService.java:380) ~[elasticsearch-7.0.0.jar:7.0.0]
        at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37) ~[elasticsearch-7.0.0.jar:7.0.0]
        at org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingAbstractRunnable.doRun(ThreadContext.java:751) ~[elasticsearch-7.0.0.jar:7.0.0]
        at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37) ~[elasticsearch-7.0.0.jar:7.0.0]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[?:?]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[?:?]
        at java.lang.Thread.run(Thread.java:835) ~[?:?]

```

then i tried with using doc.containsKey to check if field exists, but again started getting error like below:

```
Caused by: org.elasticsearch.script.ScriptException: runtime error
        at org.elasticsearch.painless.PainlessScript.convertToScriptException(PainlessScript.java:94) ~[?:?]
        at org.elasticsearch.painless.PainlessScript$Script.execute(if (doc.containsKey('key1') && doc.containsKey('key2') && doc.containsKey(key3) ~[?:?]
        at org.elasticsearch.search.fetch.subphase.ScriptFieldsFetchSubPhase.hitsExecute(ScriptFieldsFetchSubPhase.java:67) ~[elasticsearch-7.0.0.jar:7.0.0]
        at org.elasticsearch.search.fetch.FetchPhase.execute(FetchPhase.java:177) ~[elasticsearch-7.0.0.jar:7.0.0]
        at org.elasticsearch.search.SearchService.lambda$executeFetchPhase$3(SearchService.java:540) ~[elasticsearch-7.0.0.jar:7.0.0]
        at org.elasticsearch.search.SearchService$3.doRun(SearchService.java:380) ~[elasticsearch-7.0.0.jar:7.0.0]
        at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37) ~[elasticsearch-7.0.0.jar:7.0.0]
        at org.elasticsearch.common.util.concurrent.TimedRunnable.doRun(TimedRunnable.java:41) ~[elasticsearch-7.0.0.jar:7.0.0]
        at org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingAbstractRunnable.doRun(ThreadContext.java:751) ~[elasticsearch-7.0.0.jar:7.0.0]
        at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37) ~[elasticsearch-7.0.0.jar:7.0.0]
        at java.lang.Thread.run(Thread.java:835) [?:?]
Caused by: java.lang.IllegalStateException: A document doesn't have a value for a field! Use doc[<field>].size()==0 to check if a document is missing a field!
        at org.elasticsearch.index.fielddata.ScriptDocValues$Longs.get(ScriptDocValues.java:121) ~[elasticsearch-7.0.0.jar:7.0.0]
        at org.elasticsearch.index.fielddata.ScriptDocValues$Longs.getValue(ScriptDocValues.java:115) ~[elasticsearch-7.0.0.jar:7.0.0]
        at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:719) ~[?:?]
        at org.elasticsearch.painless.DefBootstrap$PIC.fallback(DefBootstrap.java:216) ~[?:?]
        at org.elasticsearch.painless.PainlessScript$Script.execute(if (doc.containsKey('key1') && doc.containsKey('key2') && doc.containsKey('key3') ~[?:?]
        at org.elasticsearch.search.fetch.subphase.ScriptFieldsFetchSubPhase.hitsExecute(ScriptFieldsFetchSubPhase.java:67) ~[elasticsearch-7.0.0.jar:7.0.0]
        at org.elasticsearch.search.fetch.FetchPhase.execute(FetchPhase.java:177) ~[elasticsearch-7.0.0.jar:7.0.0]
        at org.elasticsearch.search.SearchService.lambda$executeFetchPhase$3(SearchService.java:540) ~[elasticsearch-7.0.0.jar:7.0.0]
        at org.elasticsearch.search.SearchService$3.doRun(SearchService.java:380) ~[elasticsearch-7.0.0.jar:7.0.0]
        at org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingAbstractRunnable.doRun(ThreadContext.java:751) ~[elasticsearch-7.0.0.jar:7.0.0]

```

What's the correct way to perform this check? And why it might be failing?

Thanks.

---

<div class="post-metadata">

**Author:** ![Wolfram\_Haussig](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/wolfram_haussig/32/70528_2.png) [@Wolfram\_Haussig](https://discuss.elastic.co/u/Wolfram_Haussig)\
**Post date:** [August 9, 2019, 7:06am UTC](https://discuss.elastic.co/t/scripted-fields-throwing-error/194555/2 "2019-08-09T07:06:39Z")

</div>

> [@elk11](#):
>
> Caused by: java.lang.IllegalArgumentException: No field found for [key1] in mapping with types

It looks as if Elasticsearch was trying to find the field "key1" in the index mapping. Can you check that the field is in the mapping definition?

---

<div class="post-metadata">

**Author:** ![elk11](https://avatars.discourse-cdn.com/v4/letter/e/45deac/32.png) [@elk11](https://discuss.elastic.co/u/elk11)\
**Post date:** [August 9, 2019, 7:08am UTC](https://discuss.elastic.co/t/scripted-fields-throwing-error/194555/3 "2019-08-09T07:08:50Z")

</div>

Thanks for the quick reply @Wolfram_Haussig

Yes the field is in mapping definition of the index.

---

<div class="post-metadata">

**Author:** ![Wolfram\_Haussig](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/wolfram_haussig/32/70528_2.png) [@Wolfram\_Haussig](https://discuss.elastic.co/u/Wolfram_Haussig)\
**Post date:** [August 9, 2019, 7:10am UTC](https://discuss.elastic.co/t/scripted-fields-throwing-error/194555/4 "2019-08-09T07:10:13Z")

</div>

Than I have no idea what is happening as I do not use scripted fields but I am sure some ElasticSearch expert can help you

---

<div class="post-metadata">

**Author:** ![elk11](https://avatars.discourse-cdn.com/v4/letter/e/45deac/32.png) [@elk11](https://discuss.elastic.co/u/elk11)\
**Post date:** [August 9, 2019, 7:14am UTC](https://discuss.elastic.co/t/scripted-fields-throwing-error/194555/5 "2019-08-09T07:14:51Z")

</div>

Sure, Does it have anything to do with field actually appearing as key.key1? in mapping it appears as:

```
"key" : {
          "key1"
           "key2"
           "key3"
}

```

And in my script i access them as key.key1 and so on..

---

<div class="post-metadata">

**Author:** ![elk11](https://avatars.discourse-cdn.com/v4/letter/e/45deac/32.png) [@elk11](https://discuss.elastic.co/u/elk11)\
**Post date:** [August 9, 2019, 9:45am UTC](https://discuss.elastic.co/t/scripted-fields-throwing-error/194555/6 "2019-08-09T09:45:54Z")

</div>

Is it required that all three fields should be in same document?

---

<div class="post-metadata">

**Author:** ![Christian\_Dahlqvist](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/christian_dahlqvist/32/4617_2.png) [@Christian\_Dahlqvist](https://discuss.elastic.co/u/Christian_Dahlqvist)\
**Post date:** [August 9, 2019, 9:57am UTC](https://discuss.elastic.co/t/scripted-fields-throwing-error/194555/7 "2019-08-09T09:57:16Z")

</div>

Yes. Scripts are ru in the context of a single document.

---

<div class="post-metadata">

**Author:** ![elk11](https://avatars.discourse-cdn.com/v4/letter/e/45deac/32.png) [@elk11](https://discuss.elastic.co/u/elk11)\
**Post date:** [August 9, 2019, 10:11am UTC](https://discuss.elastic.co/t/scripted-fields-throwing-error/194555/8 "2019-08-09T10:11:34Z")

</div>

Thanks. But still I'm not able to get the script to work even though all three fields are present in my documents.

---

<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:** [September 6, 2019, 10:12am UTC](https://discuss.elastic.co/t/scripted-fields-throwing-error/194555/9 "2019-09-06T10:12:08Z")

</div>

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