# Newbie in Painless

**URL:** <https://discuss.elastic.co/t/newbie-in-painless/294700>\
**Category:** Kibana\
**Tags:** painless\
**Created:** [January 18, 2022, 1:34pm UTC](https://discuss.elastic.co/t/newbie-in-painless/294700 "2022-01-18T13:34:13Z")\
**Posts on this page:** 15\
**Page:** 1

<div class="post-metadata">

**Author:** ![Juliana\_Sabino](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/juliana_sabino/32/100475_2.png) [@Juliana\_Sabino](https://discuss.elastic.co/u/Juliana_Sabino)\
**Post date:** [January 18, 2022, 1:34pm UTC](https://discuss.elastic.co/t/newbie-in-painless/294700/1 "2022-01-18T13:34:13Z")

</div>

Hi Team,

I'm struggling so bad to find good examples on how to use painless.

I need a script that sums a count of 4 weeks and does the mean of it.

Please, can someone share something that could help me do it? A course, a tutorial, training, something ☹

---

<div class="post-metadata">

**Author:** ![aaron-nimocks](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/aaron-nimocks/32/73965_2.png) [@aaron-nimocks](https://discuss.elastic.co/u/aaron-nimocks)\
**Post date:** [January 18, 2022, 1:52pm UTC](https://discuss.elastic.co/t/newbie-in-painless/294700/2 "2022-01-18T13:52:53Z")

</div>

If you are working with weeks (dates) then I would use the [datetime](https://www.elastic.co/guide/en/elasticsearch/painless/current/painless-datetime.html) library.

If you can post sample data and expected outcome someone might be able to share how to write the script.

---

<div class="post-metadata">

**Author:** ![Juliana\_Sabino](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/juliana_sabino/32/100475_2.png) [@Juliana\_Sabino](https://discuss.elastic.co/u/Juliana_Sabino)\
**Post date:** [January 18, 2022, 2:16pm UTC](https://discuss.elastic.co/t/newbie-in-painless/294700/3 "2022-01-18T14:16:49Z")

</div>

Ok, let me start with something simple that it isn't working.

```auto
{
  "query": {
    "function_juliana": {
      "script_juliana": {
        "script": {
          "lang": "painless",
          "source": """
            int total = 0;
            if {
              x == Succeeded;
            }
            return x;
          """
        }
      }
    }
  }
}

```

I receive this error:

```auto
{
 "root_cause": [
  {
   "type": "script_exception",
   "reason": "compile error",
   "script_stack": [
    "{\n \"query\": {\n \"funct ...",
    "^---- HERE"
   ],

```

---

<div class="post-metadata">

**Author:** ![aaron-nimocks](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/aaron-nimocks/32/73965_2.png) [@aaron-nimocks](https://discuss.elastic.co/u/aaron-nimocks)\
**Post date:** [January 18, 2022, 2:27pm UTC](https://discuss.elastic.co/t/newbie-in-painless/294700/4 "2022-01-18T14:27:45Z")

</div>

Are you adding the first line also that identifies what index and what to do? This would be the `GET INDEX-NAME/_search`

**Example**

```auto
GET /messages/_search
{
  "aggs": {
    "day-of-week-count": {
      "terms": {
        "script": "return doc[\"datetime\"].value.getDayOfWeekEnum();"
      }
    }
  }
}

```

---

<div class="post-metadata">

**Author:** ![Juliana\_Sabino](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/juliana_sabino/32/100475_2.png) [@Juliana\_Sabino](https://discuss.elastic.co/u/Juliana_Sabino)\
**Post date:** [January 18, 2022, 2:39pm UTC](https://discuss.elastic.co/t/newbie-in-painless/294700/5 "2022-01-18T14:39:37Z")

</div>

Thanks so much for replying me @aaron-nimocks !

Unfortunately, it doesn't work with the GET /index/\_search as well. Look:

```auto
GET /index*/_search
{
  "query": {
    "function_juliana": {
      "script_juliana": {
        "script": {
          "lang": "painless",
          "source": """
            int total = 0;
            if {
              x == Succeeded;
            }
            return x;
          """
        }
      }
    }
  }
}

```

The result:

```auto
{
 "root_cause": [
  {
   "type": "script_exception",
   "reason": "compile error",
   "script_stack": [
    "GET /index*/_search\n{\n \"query\": {\n ...",
    " ^---- HERE"
   ],

```

---

<div class="post-metadata">

**Author:** ![aaron-nimocks](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/aaron-nimocks/32/73965_2.png) [@aaron-nimocks](https://discuss.elastic.co/u/aaron-nimocks)\
**Post date:** [January 18, 2022, 2:54pm UTC](https://discuss.elastic.co/t/newbie-in-painless/294700/6 "2022-01-18T14:54:33Z")

</div>

Is `index` the name of the index you are looking to run this on?

What do you get when you just do `GET /index*/_search`?

I am assuming you are executing this in Kibana Dev Tools also?

---

<div class="post-metadata">

**Author:** ![Juliana\_Sabino](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/juliana_sabino/32/100475_2.png) [@Juliana\_Sabino](https://discuss.elastic.co/u/Juliana_Sabino)\
**Post date:** [January 18, 2022, 2:58pm UTC](https://discuss.elastic.co/t/newbie-in-painless/294700/7 "2022-01-18T14:58:09Z")

</div>

I'm just masking the name of my index here, but when I do GET /index\*/\_search I get the same error.

```auto
{
 "root_cause": [
  {
   "type": "script_exception",
   "reason": "compile error",
   "script_stack": [
    "GET /index*/_search",
    " ^---- HERE"
   ],

```

When I do it on DevTools it works fine,

---

<div class="post-metadata">

**Author:** ![Juliana\_Sabino](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/juliana_sabino/32/100475_2.png) [@Juliana\_Sabino](https://discuss.elastic.co/u/Juliana_Sabino)\
**Post date:** [January 18, 2022, 3:00pm UTC](https://discuss.elastic.co/t/newbie-in-painless/294700/8 "2022-01-18T15:00:19Z")

</div>

Maybe the scripted fields could be disabled in Elasticsearch.yml? I don't have access to it, it's in the cloud and only the cloud guys have access. I already requested him to take a look at it for me. Do you think this could be the issue?

---

<div class="post-metadata">

**Author:** ![aaron-nimocks](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/aaron-nimocks/32/73965_2.png) [@aaron-nimocks](https://discuss.elastic.co/u/aaron-nimocks)\
**Post date:** [January 18, 2022, 3:02pm UTC](https://discuss.elastic.co/t/newbie-in-painless/294700/9 "2022-01-18T15:02:42Z")

</div>

I am kind of clueless right now why you would be getting this issue. Are you saying when you do a simple example like below its returning that error?

 ![image](https://us1.discourse-cdn.com/elastic/original/3X/d/7/d7b73e1336b2c71e7f82e5c291bb63ff1147f261.png)

---

<div class="post-metadata">

**Author:** ![Juliana\_Sabino](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/juliana_sabino/32/100475_2.png) [@Juliana\_Sabino](https://discuss.elastic.co/u/Juliana_Sabino)\
**Post date:** [January 18, 2022, 3:07pm UTC](https://discuss.elastic.co/t/newbie-in-painless/294700/10 "2022-01-18T15:07:30Z")

</div>

I'm doing it at Index Patterns -\> MyIndexPattern -\> Scripted Fields -\> Add a Scripted Field

 ![Screen Shot 2022-01-18 at 12.05.07](https://us1.discourse-cdn.com/elastic/original/3X/7/e/7e5b235edce35cc39fb39667e04eb56171273abd.png)

---

<div class="post-metadata">

**Author:** ![aaron-nimocks](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/aaron-nimocks/32/73965_2.png) [@aaron-nimocks](https://discuss.elastic.co/u/aaron-nimocks)\
**Post date:** [January 18, 2022, 3:17pm UTC](https://discuss.elastic.co/t/newbie-in-painless/294700/11 "2022-01-18T15:17:06Z")

</div>

Ahh I see now.

So this is completely different. What you were working on is a query using painless. Scripted fields are a little different.

In here you write just painless/java. Click on `Get help with the syntax and preview the results of your script.` at the bottom of the page and it can help you out some.

But to access data you use `doc['some_field'].value` and replace with the correct field name. When you get to the result you just do a `return`.

Are you trying to make a new field with the text `succeeded` if the some value of a field is `0`? If so then you can do a static lookup that kind of looks like this. You just need to replace `some_field` with the field name that contains the field that you are evaluating.

 ![image](https://us1.discourse-cdn.com/elastic/original/3X/a/2/a2e1bc1b85b26eaf5bc481955cd5348dffe9aa77.png)

---

<div class="post-metadata">

**Author:** ![Juliana\_Sabino](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/juliana_sabino/32/100475_2.png) [@Juliana\_Sabino](https://discuss.elastic.co/u/Juliana_Sabino)\
**Post date:** [January 18, 2022, 3:37pm UTC](https://discuss.elastic.co/t/newbie-in-painless/294700/12 "2022-01-18T15:37:01Z")

</div>

Ohhh I see now, thank you!!

But now it returns me an empty `[]`. 😕

---

<div class="post-metadata">

**Author:** ![aaron-nimocks](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/aaron-nimocks/32/73965_2.png) [@aaron-nimocks](https://discuss.elastic.co/u/aaron-nimocks)\
**Post date:** [January 18, 2022, 3:54pm UTC](https://discuss.elastic.co/t/newbie-in-painless/294700/13 "2022-01-18T15:54:29Z")

</div>

Are you able to share an example of the data and associated mapping?

---

<div class="post-metadata">

**Author:** ![Juliana\_Sabino](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/juliana_sabino/32/100475_2.png) [@Juliana\_Sabino](https://discuss.elastic.co/u/Juliana_Sabino)\
**Post date:** [January 19, 2022, 12:08pm UTC](https://discuss.elastic.co/t/newbie-in-painless/294700/14 "2022-01-19T12:08:13Z")

</div>

Hey @aaron-nimocks , thank you so much for all your help so far. I decided to go another way, thank you so much!

---

<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 16, 2022, 12:08pm UTC](https://discuss.elastic.co/t/newbie-in-painless/294700/15 "2022-02-16T12:08:55Z")

</div>

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