# Script caching

**URL:** <https://discuss.elastic.co/t/script-caching/212622>\
**Category:** Elasticsearch\
**Created:** [December 20, 2019, 8:05am UTC](https://discuss.elastic.co/t/script-caching/212622 "2019-12-20T08:05:13Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![skowron-line](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/skowron-line/32/43528_2.png) [@skowron-line](https://discuss.elastic.co/u/skowron-line)\
**Post date:** [December 20, 2019, 8:05am UTC](https://discuss.elastic.co/t/script-caching/212622/1 "2019-12-20T08:05:13Z")

</div>

Im having script like

```
if (doc['type'].value == 'pwp') {
            if (doc['rodzaj_pwp'].value == 1) {if (_score < params.pwp['1']) {return 0;} else {return _score;}}
            if (doc['rodzaj_pwp'].value == 2) {if (_score < params.pwp['2']) {return 0;} else {return _score;}}
            if (doc['rodzaj_pwp'].value == 3) {if (_score < params.pwp['3']) {return 0;} else {return _score;}}
            if (doc['rodzaj_pwp'].value == 4) {if (_score < params.pwp['4']) {return 0;} else {return _score;}}
            if (doc['rodzaj_pwp'].value == 5) {if (_score < params.pwp['5']) {return 0;} else {return _score;}}
            if (doc['rodzaj_pwp'].value == 6) {if (_score < params.pwp['6']) {return 0;} else {return _score;}}
            if (doc['rodzaj_pwp'].value == 7) {if (_score < params.pwp['7']) {return 0;} else {return _score;}}    
        }
        
        if (doc['type'].value == 'kolekcja') {
            if (doc['kolekcja'].value == 1) {if (_score < params.collections['1']) {return 0;} else {return _score;}}
            if (doc['kolekcja'].value == 2) {if (_score < params.collections['2']) {return 0;} else {return _score;}}
            if (doc['kolekcja'].value == 3) {if (_score < params.collections['3']) {return 0;} else {return _score;}}
            if (doc['kolekcja'].value == 4) {if (_score < params.collections['4']) {return 0;} else {return _score;}}
            if (doc['kolekcja'].value == 5) {if (_score < params.collections['5']) {return 0;} else {return _score;}}
            if (doc['kolekcja'].value == 6) {if (_score < params.collections['6']) {return 0;} else {return _score;}}
            if (doc['kolekcja'].value == 7) {if (_score < params.collections['7']) {return 0;} else {return _score;}}
        }

```

And Im using it in function\_score

Documentation says that script should be cached

`If you compile too many unique scripts within a small amount of time, Elasticsearch will reject the new dynamic scripts with a circuit_breaking_exception error. By default, up to 15 inline scripts per minute will be compiled. You can change this setting dynamically by setting script.max_compilations_rate.`

When I look at GET \_nodes/stats/script I get

```
"attributes" : {
        "ml.machine_memory" : "68311584768",
        "xpack.installed" : "true",
        "ml.max_open_jobs" : "20",
        "ml.enabled" : "true"
      },
      "script" : {
        "compilations" : 75668,
        "cache_evictions" : 75568
      }

```

And I would like to know what does it mean? That I have 75668 queries executed ?? does it counts all executions or only from some period of time ?? And how cache\_evictions works ?

---

<div class="post-metadata">

**Author:** ![spinscale](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/spinscale/32/25011_2.png) [@spinscale](https://discuss.elastic.co/u/spinscale)\
**Post date:** [December 20, 2019, 9:09am UTC](https://discuss.elastic.co/t/script-caching/212622/2 "2019-12-20T09:09:01Z")

</div>

Hey,

are you possibly changing the script with every query you send? Elasticsearch is able to cache scripts, so it does not need to compile them again and will reuse them, if they are the same script. However in your example you seem to have a different script with every query execution resulting in that script compilation cache to become constantly evicted.

Is there any chance you can parametrize your script further to prevent the ongoing recompilation?

---

<div class="post-metadata">

**Author:** ![skowron-line](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/skowron-line/32/43528_2.png) [@skowron-line](https://discuss.elastic.co/u/skowron-line)\
**Post date:** [December 20, 2019, 9:25am UTC](https://discuss.elastic.co/t/script-caching/212622/3 "2019-12-20T09:25:40Z")

</div>

Script is never changed, only parametrs are changing,  
What more can I parametrize ??

---

<div class="post-metadata">

**Author:** ![spinscale](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/spinscale/32/25011_2.png) [@spinscale](https://discuss.elastic.co/u/spinscale)\
**Post date:** [December 20, 2019, 9:30am UTC](https://discuss.elastic.co/t/script-caching/212622/4 "2019-12-20T09:30:45Z")

</div>

can you share two full sample requests?

---

<div class="post-metadata">

**Author:** ![skowron-line](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/skowron-line/32/43528_2.png) [@skowron-line](https://discuss.elastic.co/u/skowron-line)\
**Post date:** [December 20, 2019, 9:51am UTC](https://discuss.elastic.co/t/script-caching/212622/5 "2019-12-20T09:51:45Z")

</div>

@spinscale

```
{
  "source": {
    "query": {
      "function_score": {
        "min_score": 0.01,
        "boost_mode": "replace",
        "query": {
          "bool": {
            "must": [
              {
                "bool": {
                  "should": [
                    {
                      "multi_match": {
                        "query": "{{search_phrase}}",
                        "fields": [
                          "id",
                          "content.*_diacritics",
                        ],
                        "type": "phrase",
                        "boost": 10
                      }
                    }
                  ]
                }
              }
            ]
          }
        },
        "script_score": {
          "script": {
            "source": "if (doc['type'].value == 'pwp') { if (doc['rodzaj_pwp'].value == 1) {if (_score < params.pwp['1']) {return 0;} else {return _score;}} if (doc['rodzaj_pwp'].value == 2) {if (_score < params.pwp['2']) {return 0;} else {return _score;}} if (doc['rodzaj_pwp'].value == 3) {if (_score < params.pwp['3']) {return 0;} else {return _score;}} if (doc['rodzaj_pwp'].value == 4) {if (_score < params.pwp['4']) {return 0;} else {return _score;}} if (doc['rodzaj_pwp'].value == 5) {if (_score < params.pwp['5']) {return 0;} else {return _score;}} if (doc['rodzaj_pwp'].value == 6) {if (_score < params.pwp['6']) {return 0;} else {return _score;}} if (doc['rodzaj_pwp'].value == 7) {if (_score < params.pwp['7']) {return 0;} else {return _score;}} } if (doc['type'].value == 'kolekcja') { if (doc['kolekcja'].value == 1) {if (_score < params.collections['1']) {return 0;} else {return _score;}} if (doc['kolekcja'].value == 2) {if (_score < params.collections['2']) {return 0;} else {return _score;}} if (doc['kolekcja'].value == 3) {if (_score < params.collections['3']) {return 0;} else {return _score;}} if (doc['kolekcja'].value == 4) {if (_score < params.collections['4']) {return 0;} else {return _score;}} if (doc['kolekcja'].value == 5) {if (_score < params.collections['5']) {return 0;} else {return _score;}} if (doc['kolekcja'].value == 6) {if (_score < params.collections['6']) {return 0;} else {return _score;}} if (doc['kolekcja'].value == 7) {if (_score < params.collections['7']) {return 0;} else {return _score;}} }",
            "params": {
              "pwp": {
                "1": 9.783159255981445,
                "2": 6.081907081604004,
                "3": 5.965337562561035,
                "4": 0,
                "5": 6.081907081604004,
                "6": 6.081907081604004,
                "7": 0
              },
              "collections": {
                "1": 28.80948486328125,
                "2": 24.940118408203123,
                "3": 2.6661086082458496,
                "4": 10.809349822998046,
                "5": 6.160078811645508,
                "6": 6.687025451660156,
                "7": 4.0727208137512205,
                "8": 10.451463317871093
              }
            }
          }
        }
      }
    },
    "size": 50,
    "from": 0,
    "_source": {
      "excludes": [
        "content"
      ]
    },
    "highlight": {
      "fields": {
        "content.*": {
          "number_of_fragments": 10,
          "fragment_size": 1
        }
      }
    }
  },
  "params": {
    "search_phrase": "Phrase"
  }
}

{
  "source": {
    "query": {
      "function_score": {
        "min_score": 0.01,
        "boost_mode": "replace",
        "query": {
          "bool": {
            "must": [
              {
                "bool": {
                  "should": [
                    {
                      "multi_match": {
                        "query": "{{search_phrase}}",
                        "fields": [
                          "id",
                          "content.*_diacritics"
                        ],
                        "type": "phrase",
                        "boost": 10
                      }
                    }
                  ]
                }
              }
            ]
          }
        },
        "script_score": {
          "script": {
            "source": "if (doc['type'].value == 'pwp') { if (doc['rodzaj_pwp'].value == 1) {if (_score < params.pwp['1']) {return 0;} else {return _score;}} if (doc['rodzaj_pwp'].value == 2) {if (_score < params.pwp['2']) {return 0;} else {return _score;}} if (doc['rodzaj_pwp'].value == 3) {if (_score < params.pwp['3']) {return 0;} else {return _score;}} if (doc['rodzaj_pwp'].value == 4) {if (_score < params.pwp['4']) {return 0;} else {return _score;}} if (doc['rodzaj_pwp'].value == 5) {if (_score < params.pwp['5']) {return 0;} else {return _score;}} if (doc['rodzaj_pwp'].value == 6) {if (_score < params.pwp['6']) {return 0;} else {return _score;}} if (doc['rodzaj_pwp'].value == 7) {if (_score < params.pwp['7']) {return 0;} else {return _score;}} } if (doc['type'].value == 'kolekcja') { if (doc['kolekcja'].value == 1) {if (_score < params.collections['1']) {return 0;} else {return _score;}} if (doc['kolekcja'].value == 2) {if (_score < params.collections['2']) {return 0;} else {return _score;}} if (doc['kolekcja'].value == 3) {if (_score < params.collections['3']) {return 0;} else {return _score;}} if (doc['kolekcja'].value == 4) {if (_score < params.collections['4']) {return 0;} else {return _score;}} if (doc['kolekcja'].value == 5) {if (_score < params.collections['5']) {return 0;} else {return _score;}} if (doc['kolekcja'].value == 6) {if (_score < params.collections['6']) {return 0;} else {return _score;}} if (doc['kolekcja'].value == 7) {if (_score < params.collections['7']) {return 0;} else {return _score;}} }",
            "params": {
              "pwp": {
                "1": 14.189854431152343,
                "2": 14.785639572143554,
                "3": 9.516910171508789,
                "4": 3.2049719810485837,
                "5": 14.769041061401367,
                "6": 14.126902770996093,
                "7": 0.9219526290893554
              },
              "collections": {
                "1": 62.0042724609375,
                "2": 36.51323547363281,
                "3": 0.05659182071685791,
                "4": 16.65665473937988,
                "5": 14.443638610839843,
                "6": 10.999112319946288,
                "7": 14.300667572021483,
                "8": 16.40863494873047
              }
            }
          }
        }
      }
    },
    "size": 50,
    "from": 0,
    "_source": {
      "excludes": [
        "content"
      ]
    },
    "highlight": {
      "fields": {
        "content.*": {
          "number_of_fragments": 10,
          "fragment_size": 1
        }
      }
    }
  },
  "params": {
    "search_phrase": "Metalowe "
  }
}
```

---

<div class="post-metadata">

**Author:** ![spinscale](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/spinscale/32/25011_2.png) [@spinscale](https://discuss.elastic.co/u/spinscale)\
**Post date:** [December 20, 2019, 10:07am UTC](https://discuss.elastic.co/t/script-caching/212622/6 "2019-12-20T10:07:17Z")

</div>

what endpoint are you hitting? and what elasticsearch version is this?

---

<div class="post-metadata">

**Author:** ![skowron-line](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/skowron-line/32/43528_2.png) [@skowron-line](https://discuss.elastic.co/u/skowron-line)\
**Post date:** [December 20, 2019, 10:24am UTC](https://discuss.elastic.co/t/script-caching/212622/7 "2019-12-20T10:24:04Z")

</div>

1 \_search/template  
2 6.8

---

<div class="post-metadata">

**Author:** ![spinscale](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/spinscale/32/25011_2.png) [@spinscale](https://discuss.elastic.co/u/spinscale)\
**Post date:** [December 20, 2019, 12:07pm UTC](https://discuss.elastic.co/t/script-caching/212622/8 "2019-12-20T12:07:34Z")

</div>

can you try using `_search` and replace the search term directly? I wold like to take the templating mechanism out of the equation - which might be the culprit here...

---

<div class="post-metadata">

**Author:** ![skowron-line](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/skowron-line/32/43528_2.png) [@skowron-line](https://discuss.elastic.co/u/skowron-line)\
**Post date:** [December 20, 2019, 2:16pm UTC](https://discuss.elastic.co/t/script-caching/212622/9 "2019-12-20T14:16:15Z")

</div>

Removing template query worked, thanks a lot

---

<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:** [January 17, 2020, 2:16pm UTC](https://discuss.elastic.co/t/script-caching/212622/10 "2020-01-17T14:16:17Z")

</div>

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