# Use script fields to filter data

**URL:** https://discuss.elastic.co/t/use-script-fields-to-filter-data/125771
**Category:** Elasticsearch
**Created:** [March 27, 2018, 2:05pm UTC](https://discuss.elastic.co/t/use-script-fields-to-filter-data/125771 "2018-03-27T14:05:33Z")
**Posts on this page:** 10
**Page:** 1

<div class="post-metadata">

### Author: ![TomTom](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/tomtom/32/3676_2.png) [@TomTom](https://discuss.elastic.co/u/TomTom)
#### Post date: [March 27, 2018, 2:05pm UTC](https://discuss.elastic.co/t/use-script-fields-to-filter-data/125771/1 "2018-03-27T14:05:33Z")

</div>

Is possible use a script\_fields to filter/find data?

Example:

```
{
    "script_fields": {
        "my_custom_field": {
            "script": {
                "inline": "int x; x = 0; x = ((doc['deadline'].empty)&&(doc['situation'].== 5))?1:2; return x;
            }
        }
    },
    "query": {
        "bool": {
            "must": [
                {
                    "term": {
                        "fields.my_custom_field": 2
                    }
                }
            ]
        }
    }
}
```

---

<div class="post-metadata">

### Author: ![rjernst](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/rjernst/32/6363_2.png) [@rjernst](https://discuss.elastic.co/u/rjernst)
#### Post date: [March 29, 2018, 6:15am UTC](https://discuss.elastic.co/t/use-script-fields-to-filter-data/125771/2 "2018-03-29T06:15:45Z")

</div>

Scripts fields are for adding dynamic fields to the top N returned by search. Take a look at the [script query](https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-script-query.html).

---

<div class="post-metadata">

### Author: ![TomTom](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/tomtom/32/3676_2.png) [@TomTom](https://discuss.elastic.co/u/TomTom)
#### Post date: [March 29, 2018, 2:25pm UTC](https://discuss.elastic.co/t/use-script-fields-to-filter-data/125771/3 "2018-03-29T14:25:47Z")

</div>

Is possible use a stored script inside in a source script?

Something, like:

```
  "script": {
    "source": "if( my_storedscript == 3){return false} else {return true}"
  }
```

---

<div class="post-metadata">

### Author: ![rjernst](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/rjernst/32/6363_2.png) [@rjernst](https://discuss.elastic.co/u/rjernst)
#### Post date: [March 29, 2018, 3:43pm UTC](https://discuss.elastic.co/t/use-script-fields-to-filter-data/125771/4 "2018-03-29T15:43:11Z")

</div>

Unfortunately this isn't possible. Scripts cannot be called nested within another.

---

<div class="post-metadata">

### Author: ![TomTom](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/tomtom/32/3676_2.png) [@TomTom](https://discuss.elastic.co/u/TomTom)
#### Post date: [March 29, 2018, 5:31pm UTC](https://discuss.elastic.co/t/use-script-fields-to-filter-data/125771/5 "2018-03-29T17:31:16Z")

</div>

Thanks @rjernst.

Another question, i have created two scripts and execute both inside query-\>bool-\>must, but the scripts are execute with the condition OR, script1 = true or script2 = true, is possible return just the data when both scripts return true?

**Query:**

```
{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "active": true
          }
        },
        {
          "script": {
            "script": [
              {
                "id": "script_query_1",
                "params": {
                  "list": [
                    1
                  ],
                  "current_timestamp": 1522344053924
                }
              },
              {
                "id": "script_query_2",
                "params": {
                  "list": [
                    1
                  ],
                  "current_timestamp": 1522344053924
                }
              }
            ]
          }
        }
      ]
    }
  },
  "script_fields": {
    "deadline_cumprido": {
      "script": {
        "id": "script_query_1",
        "params": {
          "list": [1],
          "current_timestamp": 1522344053924
        }
      }
    },
    "start_deadline_cumprido": {
      "script": {
        "id": "script_query_2",
        "params": {
          "list": [1],
          "current_timestamp": 1522344053924
        }
      }
    }
  }
}

```

**Result:**

```
{
  "took": 2,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": 3,
    "max_score": 2.0,
    "hits": [
      {
        "_index": "myindex_example",
        "_type": "doc_example",
        "_id": "2648374-14492",
        "_score": 2.0,
        "fields": {
          "script_query_2": [
            true
          ],
          "script_query_1": [
            true
          ]
        }
      },
      {
        "_index": "myindex_example",
        "_type": "doc_example",
        "_id": "2648373-14492",
        "_score": 2.0,
        "fields": {
          "script_query_2": [
            true
          ],
          "script_query_1": [
            true
          ]
        }
      },
      {
        "_index": "myindex_example",
        "_type": "doc_example",
        "_id": "2648375-14492",
        "_score": 2.0,
        "fields": {
          "script_query_2": [
            true
          ],
          "script_query_1": [
            false
          ]
        }
      }
    ]
  }
}
```

---

<div class="post-metadata">

### Author: ![rjernst](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/rjernst/32/6363_2.png) [@rjernst](https://discuss.elastic.co/u/rjernst)
#### Post date: [March 29, 2018, 10:07pm UTC](https://discuss.elastic.co/t/use-script-fields-to-filter-data/125771/6 "2018-03-29T22:07:55Z")

</div>

You would need to put each script as a separate script query, inside a `must` or `filter` clause of your `bool` query. I'm actually surprised your example query does not throw an error; it should.

---

<div class="post-metadata">

### Author: ![TomTom](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/tomtom/32/3676_2.png) [@TomTom](https://discuss.elastic.co/u/TomTom)
#### Post date: [March 29, 2018, 10:52pm UTC](https://discuss.elastic.co/t/use-script-fields-to-filter-data/125771/7 "2018-03-29T22:52:40Z")

</div>

Like this way?

```
{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "active": true
          },
          "script": {
            "script": 
              {
                "id": "script_query_1",
                "params": {
                  "list": [
                    1
                  ],
                  "current_timestamp": 1522344053924
                }
              }
            },
            "script": {
                "script": {
                "id": "script_query_2",
                "params": {
                  "list": [
                    1
                  ],
                  "current_timestamp": 1522344053924
                }
              }
            }
        }
      ]
    }
  },
  "script_fields": {
    "script_query_1_field": {
      "script": {
        "id": "script_query_1",
        "params": {
          "list": [1],
          "current_timestamp": 1522344053924
        }
      }
    },
    "script_query_2_field": {
      "script": {
        "id": "script_query_2",
        "params": {
          "list": [1],
          "current_timestamp": 1522344053924
        }
      }
    }
  }
}
```

---

<div class="post-metadata">

### Author: ![rjernst](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/rjernst/32/6363_2.png) [@rjernst](https://discuss.elastic.co/u/rjernst)
#### Post date: [March 29, 2018, 11:50pm UTC](https://discuss.elastic.co/t/use-script-fields-to-filter-data/125771/8 "2018-03-29T23:50:22Z")

</div>

Yes, that looks roughly correct.

---

<div class="post-metadata">

### Author: ![TomTom](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/tomtom/32/3676_2.png) [@TomTom](https://discuss.elastic.co/u/TomTom)
#### Post date: [April 2, 2018, 12:30pm UTC](https://discuss.elastic.co/t/use-script-fields-to-filter-data/125771/9 "2018-04-02T12:30:34Z")

</div>

Thanks, problem solved.

```
{
"query": {
    "bool": {
        "must": [
            {
                "term": {
                    "active": true
                }
            },
            {
                "script": {
                    "script": {
                        "id": "script_query_1",
                        "params": {
                            "list": [
                                1
                            ],
                            "current_timestamp": 1522344053924
                        }
                    }
                }
            },
            {
                "script": {
                    "script": {
                        "id": "script_query_2",
                        "params": {
                            "list": [
                                1
                            ],
                            "current_timestamp": 1522344053924
                        }
                    }
                }
            }
        ]
    }
},
```

---

<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: [April 30, 2018, 12:31pm UTC](https://discuss.elastic.co/t/use-script-fields-to-filter-data/125771/10 "2018-04-30T12:31:28Z")

</div>

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