# Elastic query scipting issue using painless ( Too many dynamic script compilations )

**URL:** <https://discuss.elastic.co/t/elastic-query-scipting-issue-using-painless-too-many-dynamic-script-compilations/288693>\
**Category:** Elasticsearch\
**Tags:** painless\
**Created:** [November 9, 2021, 2:59am UTC](https://discuss.elastic.co/t/elastic-query-scipting-issue-using-painless-too-many-dynamic-script-compilations/288693 "2021-11-09T02:59:05Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![Agnivesh\_Sharma](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/agnivesh_sharma/32/77134_2.png) [@Agnivesh\_Sharma](https://discuss.elastic.co/u/Agnivesh_Sharma)\
**Post date:** [November 9, 2021, 2:59am UTC](https://discuss.elastic.co/t/elastic-query-scipting-issue-using-painless-too-many-dynamic-script-compilations/288693/1 "2021-11-09T02:59:05Z")

</div>

A functional script query is working fine when i dont add certain scripts to it but it fails and returns \> **[script] Too many dynamic script compilations within, max: [75/5m]; please use indexed, or scripts with parameters instead; this limit can be changed by the [script.max\_compilations\_rate] setting** \> this error when i add mainly 2 scripts to it. Also this is not happening everytime, sometimes it works fine but most of the times it returns error. Below are the queries :

**Working query :**

```auto
{
  "_source": false,
  "query": {
    "function_score": {
      "functions": [
        {
          "script_score": {
            "script": {
              "source": "doc['profile_completed_score'].value >0 ? doc['profile_completed_score'].value * 0.15 : 0"
            }
          }
        },
        {
          "script_score": {
            "script": {
              "source": "if(!doc['profile_pic'].empty)return 10; return 0;"
            }
          }
        },
        {
          "gauss": {
            "city_geolocation": {
              "origin": {
                "lat": "28.536000",
                "lon": "77.391000"
              },
              "scale": "100km",
              "offset": "100km",
              "decay": 0.0001
            }
          },
          "weight": 15
        },
        {
          "script_score": {
            "script": {
              "source": "def designation=0; if(doc['designation_name.keyword'].value != null && doc['designation_name.keyword'].value==params.designation) { designation=30; } else { if(doc['designation_name.keyword'].value != null && (doc['designation_name.keyword'].value.toUpperCase().indexOf(params.designation.toUpperCase())>-1 || params.designation.toUpperCase().indexOf(doc['designation_name.keyword'].value.toUpperCase())>-1)) designation=15; } return designation;",
              "params": {
                "designation": "Technical Manager"
              }
            }
          }
        },
        {
          "script_score": {
            "script": {
              "source": "def visited=0;def vscore=0;if(!doc['visited_event'].empty && doc['visited_event'].values.contains(params.fact))visited=10;if(!doc['avg_visitor_score'].empty)vscore=doc['avg_visitor_score'].value*0.2; return visited+vscore;",
              "params": {
                "fact": "13039"
              }
            }
          }
        }
      ],
      "score_mode": "sum",
      "boost_mode": "replace"
    }
  },
  "size": 20,
  "from": 0
}

```

**Query returning error most of times :**

```auto
{
  "_source": false,
  "query": {
    "function_score": {
      "functions": [
        {
          "script_score": {
            "script": {
              "source": "doc['profile_completed_score'].value >0 ? doc['profile_completed_score'].value * 0.15 : 0"
            }
          }
        },
        {
          "script_score": {
            "script": {
              "source": "if(!doc['profile_pic'].empty)return 10; return 0;"
            }
          }
        },
        {
          "gauss": {
            "city_geolocation": {
              "origin": {
                "lat": "28.536000",
                "lon": "77.391000"
              },
              "scale": "100km",
              "offset": "100km",
              "decay": 0.0001
            }
          },
          "weight": 15
        },
        {
          "script_score": {
            "script": {
              "source": "def designation=0; if(doc['designation_name.keyword'].value != null && doc['designation_name.keyword'].value==params.designation) { designation=30; } else { if(doc['designation_name.keyword'].value != null && (doc['designation_name.keyword'].value.toUpperCase().indexOf(params.designation.toUpperCase())>-1 || params.designation.toUpperCase().indexOf(doc['designation_name.keyword'].value.toUpperCase())>-1)) designation=15; } return designation;",
              "params": {
                "designation": "Technical Manager"
              }
            }
          }
        },
        {
          "script_score": {
           "script": {
              "source": "if(!doc['email_active'].empty && doc['email_active'].toInstant().toEpochMilli()/(params.divi) >= (params.epochtime)) return 30; return 0;",
              "params": {
                "divi": 1000,
                "epochtime": 1607863137
              }
            }
          }
        },
        {
          "script_score": {
            "script": {
              "source": "if((!doc['checkin_edition'].empty && doc['checkin_edition'].contains(params.fact))) return 30; return 0;",
              "params": {
                "fact": "1330689"
              }
            }
          }
        },
        {
          "script_score": {
            "script": {
              "source": "def visited=0;def vscore=0;if(!doc['visited_event'].empty && doc['visited_event'].values.contains(params.fact))visited=10;if(!doc['avg_visitor_score'].empty)vscore=doc['avg_visitor_score'].value*0.2; return visited+vscore;",
              "params": {
                "fact": "13039"
              }
            }
          }
        }
      ],
      "score_mode": "sum",
      "boost_mode": "replace"
    }
  },
  "size": 20,
  "from": 0
}

```

**I tried indexing the scripts and using them with parameters but it didn't work.**  
**Also tried increasing the limit to 150/5m but it is breaking at some point again**

Any kind of help is much appriciated.

Thanks//

---

<div class="post-metadata">

**Author:** ![Christian\_Dahlqvist](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/christian_dahlqvist/32/4617_2.png) [@Christian\_Dahlqvist](https://discuss.elastic.co/u/Christian_Dahlqvist)\
**Post date:** [November 9, 2021, 4:48am UTC](https://discuss.elastic.co/t/elastic-query-scipting-issue-using-painless-too-many-dynamic-script-compilations/288693/2 "2021-11-09T04:48:28Z")

</div>

You should use parameters. What did the scripts look like when you tried using parameters?

---

<div class="post-metadata">

**Author:** ![Agnivesh\_Sharma](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/agnivesh_sharma/32/77134_2.png) [@Agnivesh\_Sharma](https://discuss.elastic.co/u/Agnivesh_Sharma)\
**Post date:** [November 9, 2021, 5:03am UTC](https://discuss.elastic.co/t/elastic-query-scipting-issue-using-painless-too-many-dynamic-script-compilations/288693/3 "2021-11-09T05:03:55Z")

</div>

I defined parameter for every value possible. It looked something like this :

```auto
"functions": [
        {
          "script_score": {
            "script": {
              "source": "doc['profile_completed_score'].value >(params.zero) ? doc['profile_completed_score'].value * (params.mul) : (params.zero)", 
              "params": {
                "mul" : 0.15,
                "zero" : 0
              }
            }
          }
        },
        {
          "script_score": {
            "script": {
              "source": "if(!doc['profile_pic'].empty)return (params.ten); return (params.zero);",
              "params": {
                "ten" : 10,
                "zero" : 0
              }
            }
          }
        },
        {
          "gauss": {
            "city_geolocation": {
              "origin": {
                "lat": "13.010000",
                "lon": "-61.231000"
              },
              "scale": "100km",
              "offset": "100km",
              "decay": 0.0001
            }
          },
          "weight": 15
        },
        {
          "script_score": {
            "script": {
              "source": "def designation=(params.zero); if(doc['designation_name.keyword'].value != (params.null) && doc['designation_name.keyword'].value==params.designation) { designation=(params.thirty); } else { if(doc['designation_name.keyword'].value != (params.null) && (doc['designation_name.keyword'].value.toUpperCase().indexOf(params.designation.toUpperCase())>(params.neg) || params.designation.toUpperCase().indexOf(doc['designation_name.keyword'].value.toUpperCase())>(params.neg))) designation=(params.fif); } return designation;",
              "params": {
                "designation": "Designer",
                "neg" : -1,
                "zero" : 0,
                "thirty" : 30,
                "fif" : 15,
                "null": null
              }
            }
          }
        },
        {
          "script_score": {
            "script": {
              "source": "if(!doc['email_active'].empty && doc['email_active'].value.getMillis()/(params.divi) >= (params.epochtime)) return (params.thirty); return (params.zero);",
              "params": {
                "epochtime" : 1606716947,
                "divi" : 1000,
                "thirty" : 30,
                "zero" : 0
              }
            }
          }
        },
        {
          "script_score": {
            "script": {
              "source": "if((!doc['checkin_edition'].empty && doc['checkin_edition'].values.contains(params.fact))) return (params.thirty); return (params.zero);",
              "params": {
                "fact": "718544",
                "zero" : 0,
                "thirty": 30
              }
            }
          }
        },
        {
          "script_score": {
            "script": {
              "source": "def visited=(params.zero);def vscore=(params.zero);if(!doc['visited_event'].empty && doc['visited_event'].values.contains(params.fact))visited=(params.ten);if(!doc['avg_visitor_score'].empty)vscore=doc['avg_visitor_score'].value*(params.mul); return visited+vscore;",
              "params": {
                "fact": "13039",
                "zero" : 0,
                "ten" : 10,
                "mul": 0.12
              }
            }
          }
        }
      ],

```

---

<div class="post-metadata">

**Author:** ![stu](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/stu/32/75063_2.png) [@stu](https://discuss.elastic.co/u/stu)\
**Post date:** [November 15, 2021, 4:53pm UTC](https://discuss.elastic.co/t/elastic-query-scipting-issue-using-painless-too-many-dynamic-script-compilations/288693/4 "2021-11-15T16:53:32Z")

</div>

Have you looked at your [script cache eviction stats](https://www.elastic.co/guide/en/elasticsearch/reference/current/cluster-nodes-stats.html#cluster-nodes-stats-api-response-body-script)?

If you see a lot of cache evictions, you may want to increase the `script.cache.max_size` setting because you may be thrashing your script compilation cache.

---

<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:** [December 13, 2021, 4:53pm UTC](https://discuss.elastic.co/t/elastic-query-scipting-issue-using-painless-too-many-dynamic-script-compilations/288693/5 "2021-12-13T16:53:53Z")

</div>

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