# Scripting - How to find functions / methods in documentation of Elasticsearch

**URL:** <https://discuss.elastic.co/t/scripting-how-to-find-functions-methods-in-documentation-of-elasticsearch/249776>\
**Category:** Elasticsearch\
**Created:** [September 24, 2020, 8:54am UTC](https://discuss.elastic.co/t/scripting-how-to-find-functions-methods-in-documentation-of-elasticsearch/249776 "2020-09-24T08:54:53Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![vasek](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/vasek/32/136636_2.png) [@vasek](https://discuss.elastic.co/u/vasek)\
**Post date:** [September 24, 2020, 8:54am UTC](https://discuss.elastic.co/t/scripting-how-to-find-functions-methods-in-documentation-of-elasticsearch/249776/1 "2020-09-24T08:54:53Z")

</div>

Hello,  
can anyone help me where I can **find in documentation** of Elasticsearch 7.x statements like:

```auto
"".equals(ctx['field'])

```

or

```auto
ctx['field'].empty

```

or

```auto
doc.containsKey('field.keyword')) 

```

---

<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:** [September 24, 2020, 9:19am UTC](https://discuss.elastic.co/t/scripting-how-to-find-functions-methods-in-documentation-of-elasticsearch/249776/2 "2020-09-24T09:19:04Z")

</div>

Hi,

To find out which variables are available in a specific context have a look [here](https://www.elastic.co/guide/en/elasticsearch/painless/master/painless-contexts.html).  
To see which attributes and methods exist for a type you can check the documentation [here](https://www.elastic.co/guide/en/elasticsearch/painless/master/painless-api-reference-shared.html)

Best regards  
Wolfram

---

<div class="post-metadata">

**Author:** ![vasek](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/vasek/32/136636_2.png) [@vasek](https://discuss.elastic.co/u/vasek)\
**Post date:** [September 24, 2020, 9:40am UTC](https://discuss.elastic.co/t/scripting-how-to-find-functions-methods-in-documentation-of-elasticsearch/249776/3 "2020-09-24T09:40:56Z")

</div>

Thank you @Wolfram_Haussig for your answer.

I'm creating script in pipeline, so the context is **Ingest processor**.  
So the access for variable is ctx['field'].

Now I would like to know which functions can I use on this field.  
I was looking in [SHARED API](https://www.elastic.co/guide/en/elasticsearch/painless/master/painless-api-reference-shared.html) page but I cannot find **empty** - `ctx['field'].empty`.

So I've continued with searching for `"".equals(ctx['field'])` and I've found out [ELASTICSEACH PAINLESS API](https://www.elastic.co/guide/en/elasticsearch/painless/master/painless-api-reference-shared-org-elasticsearch-painless-api.html). But I'm not sure whether am I right.

---

<div class="post-metadata">

**Author:** ![Dominic\_Page](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dominic_page/32/48318_2.png) [@Dominic\_Page](https://discuss.elastic.co/u/Dominic_Page)\
**Post date:** [September 24, 2020, 10:37am UTC](https://discuss.elastic.co/t/scripting-how-to-find-functions-methods-in-documentation-of-elasticsearch/249776/4 "2020-09-24T10:37:06Z")

</div>

Hi @vasek can you open this query in the Elastic Stack -\> Elasticsearch

[https://discuss.elastic.co/c/elastic-stack/elasticsearch/6](https://discuss.elastic.co/c/elastic-stack/elasticsearch/6)

Topic, I think you will get more relevant replies there. The "Elastic Training" Topic is intended for questions about specific Trainings, rather than the underlying products themselves

Hope this helps

KR

---

<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:** [September 24, 2020, 10:40am UTC](https://discuss.elastic.co/t/scripting-how-to-find-functions-methods-in-documentation-of-elasticsearch/249776/5 "2020-09-24T10:40:01Z")

</div>

Hello,

According to the documentation ctx is a map:

> `ctx` ( `Map` )
> 
> Contains extracted JSON in a `Map` and `List` structure for the fields that are part of the document.

So now we look for the map type in the second link which is the [AbstractMap](https://www.elastic.co/guide/en/elasticsearch/painless/master/painless-api-reference-shared-java-util.html#painless-api-reference-shared-AbstractMap). this contains a containsKey function:

> - boolean [containsKey](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Map.html#containsKey(java.lang.Object))(def)

Is this what you were looking for?

Best regards  
Wolfram

---

<div class="post-metadata">

**Author:** ![vasek](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/vasek/32/136636_2.png) [@vasek](https://discuss.elastic.co/u/vasek)\
**Post date:** [September 24, 2020, 10:41am UTC](https://discuss.elastic.co/t/scripting-how-to-find-functions-methods-in-documentation-of-elasticsearch/249776/6 "2020-09-24T10:41:36Z")

</div>

Great! This is exactly what I was looking for. Thank you @Wolfram_Haussig!

---

<div class="post-metadata">

**Author:** ![vasek](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/vasek/32/136636_2.png) [@vasek](https://discuss.elastic.co/u/vasek)\
**Post date:** [September 24, 2020, 10:43am UTC](https://discuss.elastic.co/t/scripting-how-to-find-functions-methods-in-documentation-of-elasticsearch/249776/7 "2020-09-24T10:43:58Z")

</div>

I put this question to this group because I cannot find it in Study Materials (preparation for ES certification). I've read that only Elasticsearch documentation is available so I can know where to search 🙂  
For the next I'll query on another forum. Thank you.

---

<div class="post-metadata">

**Author:** ![abdon](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/abdon/32/9195_2.png) [@abdon](https://discuss.elastic.co/u/abdon)\
**Post date:** [September 24, 2020, 10:44am UTC](https://discuss.elastic.co/t/scripting-how-to-find-functions-methods-in-documentation-of-elasticsearch/249776/8 "2020-09-24T10:44:40Z")

</div>

If I can add to Wolfram's excellent post, one of the more difficult things about working with Painless, in my opinion, is knowing what kind of object you are dealing with, and what the methods are that are available to you. Let me share my approach to that finding that out.

Painless has a [`Debug.explain` method](https://www.elastic.co/guide/en/elasticsearch/painless/current/painless-debugging.html). You can pass it an object, and the method will tell you what kind of object you're dealing with in the exception that it throws as a response. For example, if you execute the following:

```auto
POST /_ingest/pipeline/_simulate
{
  "pipeline": {
    "processors": [
      {
        "script": {
          "source": "Debug.explain(ctx['field'])"
        }
      }
    ]
  },
  "docs": [
    {
      "_source": {
        "field": "abc"
      }
    }
  ]
}

```

The response will tell you that `ctx['field']` is a `java.lang.String`. This is an ordinary Java string, and you can refer to [the Java documentation](https://docs.oracle.com/javase/9/docs/api/java/lang/String.html) to see what methods are available.

That's what `"".equals(ctx['field'])` is: it's Java syntax to compare `ctx['field']` with an empty string. In other words: it checks whether `ctx['field']` is an empty string.

---

<div class="post-metadata">

**Author:** ![vasek](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/vasek/32/136636_2.png) [@vasek](https://discuss.elastic.co/u/vasek)\
**Post date:** [September 24, 2020, 10:52am UTC](https://discuss.elastic.co/t/scripting-how-to-find-functions-methods-in-documentation-of-elasticsearch/249776/9 "2020-09-24T10:52:24Z")

</div>

Thank you @abdon for explanation. It's a good trick 😉

---

<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:** [October 24, 2020, 10:52am UTC](https://discuss.elastic.co/t/scripting-how-to-find-functions-methods-in-documentation-of-elasticsearch/249776/10 "2020-10-24T10:52:39Z")

</div>

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