# Conditional scripted field with if else

**URL:** https://discuss.elastic.co/t/conditional-scripted-field-with-if-else/261646
**Category:** Kibana
**Created:** [January 20, 2021, 12:38pm UTC](https://discuss.elastic.co/t/conditional-scripted-field-with-if-else/261646 "2021-01-20T12:38:49Z")
**Posts on this page:** 13
**Page:** 1

<div class="post-metadata">

### Author: ![Rakesh\_Rayabarapu](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/rakesh_rayabarapu/32/79132_2.png) [@Rakesh\_Rayabarapu](https://discuss.elastic.co/u/Rakesh_Rayabarapu)
#### Post date: [January 20, 2021, 12:38pm UTC](https://discuss.elastic.co/t/conditional-scripted-field-with-if-else/261646/1 "2021-01-20T12:38:49Z")

</div>

Hello Team,  
I am new to this tool,  
Could you please help me to fix this painless script.  
I am trying get new scripted field with [ResTime] value when [Region] is "APJ" else blank.

if (doc['Region'].value == 'APJ') {  
return doc['ResTime'].value ;  
} else {  
return null ;  
}

Thanks in Advance.

---

<div class="post-metadata">

### Author: ![flash1293](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/flash1293/32/41227_2.png) [@flash1293](https://discuss.elastic.co/u/flash1293)
#### Post date: [January 20, 2021, 1:38pm UTC](https://discuss.elastic.co/t/conditional-scripted-field-with-if-else/261646/2 "2021-01-20T13:38:15Z")

</div>

This looks fine, what's the issue?

When editing the scripted field, you can use the "Get help with the syntax and preview the results of your script." link to get a preview for 10 documents in your index pattern. If your script throws errors, they will show up there.

A common problem is some documents not containing referenced fields.

---

<div class="post-metadata">

### Author: ![Rakesh\_Rayabarapu](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/rakesh_rayabarapu/32/79132_2.png) [@Rakesh\_Rayabarapu](https://discuss.elastic.co/u/Rakesh_Rayabarapu)
#### Post date: [January 20, 2021, 1:53pm UTC](https://discuss.elastic.co/t/conditional-scripted-field-with-if-else/261646/3 "2021-01-20T13:53:55Z")

</div>

Thanks for quick response!

here is the error.. please review and suggest me..

There's an error in your script

```auto
{
 "root_cause": [
   },
    "caused_by": {
     "type": "illegal_argument_exception",
     "reason": "Text fields are not optimised for operations that require per-document field data like aggregations and sorting, so these operations are disabled by default. Please use a keyword field instead. Alternatively, set fielddata=true on [Region] in order to load field data by uninverting the inverted index. Note that this can use significant memory."
    }
   }
  }
 ]
}

```

---

<div class="post-metadata">

### Author: ![flash1293](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/flash1293/32/41227_2.png) [@flash1293](https://discuss.elastic.co/u/flash1293)
#### Post date: [January 20, 2021, 2:22pm UTC](https://discuss.elastic.co/t/conditional-scripted-field-with-if-else/261646/4 "2021-01-20T14:22:33Z")

</div>

you are using a text field which is not available for scripted fields. If you use the default mappings, `Region.keyword` should work fine. Otherwise, you have to add a keyword-indexed version of the region field.

---

<div class="post-metadata">

### Author: ![Rakesh\_Rayabarapu](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/rakesh_rayabarapu/32/79132_2.png) [@Rakesh\_Rayabarapu](https://discuss.elastic.co/u/Rakesh_Rayabarapu)
#### Post date: [January 21, 2021, 4:07am UTC](https://discuss.elastic.co/t/conditional-scripted-field-with-if-else/261646/5 "2021-01-21T04:07:48Z")

</div>

Thanks Joe.

I changed to Region.keyword.. Now got new error.. please find it below.

There's an error in your script  
"caused\_by": {  
"type": "illegal\_state\_exception",  
"reason": "A document doesn't have a value for a field! Use doc[].size()==0 to check if a document is missing a field!"  
}  
}  
}  
]  
}

Thanks for response.

---

<div class="post-metadata">

### Author: ![Rakesh\_Rayabarapu](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/rakesh_rayabarapu/32/79132_2.png) [@Rakesh\_Rayabarapu](https://discuss.elastic.co/u/Rakesh_Rayabarapu)
#### Post date: [January 21, 2021, 4:18am UTC](https://discuss.elastic.co/t/conditional-scripted-field-with-if-else/261646/6 "2021-01-21T04:18:22Z")

</div>

hello joe,  
I changed script to

if (doc['Region.keyword'].size()==0) {  
return null;  
}  
else if (doc['Region.keyword'].value == "APJ") {  
return doc['ResponseTime'].value ;  
} else {  
return null ;  
}

Now I got new requirement,  
I am trying get new scripted field with [ResTime] value when [Region.keyword] is "APJ" and "Location.keyword" is "Sigapore" else blank.

How can I add one more condition for script?

Thanks in advance..

---

<div class="post-metadata">

### Author: ![flash1293](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/flash1293/32/41227_2.png) [@flash1293](https://discuss.elastic.co/u/flash1293)
#### Post date: [January 21, 2021, 8:22am UTC](https://discuss.elastic.co/t/conditional-scripted-field-with-if-else/261646/7 "2021-01-21T08:22:47Z")

</div>

You can do multiple conditions like this:

```auto
if (a && b) {

```

so in your case

```auto
if (doc['Region.keyword'].value == "APJ" && doc['Location.keyword'].value == "Singapore") {

```

---

<div class="post-metadata">

### Author: ![Rakesh\_Rayabarapu](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/rakesh_rayabarapu/32/79132_2.png) [@Rakesh\_Rayabarapu](https://discuss.elastic.co/u/Rakesh_Rayabarapu)
#### Post date: [January 21, 2021, 8:37am UTC](https://discuss.elastic.co/t/conditional-scripted-field-with-if-else/261646/8 "2021-01-21T08:37:01Z")

</div>

Thanks Joe .. its working fine on dashboards and visuals..

but found some error on discover page.

please find attached screen shot.

 ![image](https://us1.discourse-cdn.com/elastic/original/3X/4/8/483c4d9bb32a3293d78ae82b2c0921acb24bf165.png)

how can I fix this..?

Thanks in advance 🙂

---

<div class="post-metadata">

### Author: ![flash1293](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/flash1293/32/41227_2.png) [@flash1293](https://discuss.elastic.co/u/flash1293)
#### Post date: [January 21, 2021, 8:41am UTC](https://discuss.elastic.co/t/conditional-scripted-field-with-if-else/261646/9 "2021-01-21T08:41:27Z")

</div>

This looks like the old "field does not exist on a document" issue again. Make sure to guard all fields you are using with `if (doc['<field name>'].size()==0) { return null; }`

---

<div class="post-metadata">

### Author: ![Rakesh\_Rayabarapu](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/rakesh_rayabarapu/32/79132_2.png) [@Rakesh\_Rayabarapu](https://discuss.elastic.co/u/Rakesh_Rayabarapu)
#### Post date: [January 21, 2021, 11:04am UTC](https://discuss.elastic.co/t/conditional-scripted-field-with-if-else/261646/10 "2021-01-21T11:04:49Z")

</div>

Joe, could you please elaborate the solution.

---

<div class="post-metadata">

### Author: ![flash1293](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/flash1293/32/41227_2.png) [@flash1293](https://discuss.elastic.co/u/flash1293)
#### Post date: [January 21, 2021, 11:06am UTC](https://discuss.elastic.co/t/conditional-scripted-field-with-if-else/261646/11 "2021-01-21T11:06:32Z")

</div>

It looks like there is a document in your index which doesn't have a value for `ResponseTime` - you have to make sure your script checks whether that's the case. Same what you did for `Region.keyword`

---

<div class="post-metadata">

### Author: ![Rakesh\_Rayabarapu](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/rakesh_rayabarapu/32/79132_2.png) [@Rakesh\_Rayabarapu](https://discuss.elastic.co/u/Rakesh_Rayabarapu)
#### Post date: [January 21, 2021, 11:20am UTC](https://discuss.elastic.co/t/conditional-scripted-field-with-if-else/261646/12 "2021-01-21T11:20:55Z")

</div>

Thank you so much Joe, for saving time.

---

<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: [February 18, 2021, 11:21am UTC](https://discuss.elastic.co/t/conditional-scripted-field-with-if-else/261646/13 "2021-02-18T11:21:46Z")

</div>

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