I'm trying to make a parametrized scripted similarity function but I can't get it to work.
I have created the script and have it stored.
However, when I try to implement it in the similarity score, I keep getting errors because of the symbol [params].
^ I know my script looks very similar to BM25, but I need to parametrized certain values during the query.
{
"error" : {
"root_cause" : [
{
"type" : "script_exception",
"reason" : "compile error",
"script_stack" : [
"... f = doc.freq/(doc.freq + params['k1'] * (1 - param ...",
" ^---- HERE"
],
"script" : "double boost = 2.2 * doc.freq; double tf = doc.freq/(doc.freq + params['k1'] * (1 - params['b'] + params['b'] * field('dl_avgdl'))); double idf = Math.log(1 + ((params['docs_count'] - term.docfreq + 0.5)/(term.docFreq + 0.5))); return query.boost * tf * idf * norm;",
"lang" : "painless",
"position" : {
"offset" : 64,
"start" : 39,
"end" : 89
}
}
],
"type" : "script_exception",
"reason" : "compile error",
"script_stack" : [
"... f = doc.freq/(doc.freq + params['k1'] * (1 - param ...",
" ^---- HERE"
],
"script" : "double boost = 2.2 * doc.freq; double tf = doc.freq/(doc.freq + params['k1'] * (1 - params['b'] + params['b'] * field('dl_avgdl'))); double idf = Math.log(1 + ((params['docs_count'] - term.docfreq + 0.5)/(term.docFreq + 0.5))); return query.boost * tf * idf * norm;",
"lang" : "painless",
"position" : {
"offset" : 64,
"start" : 39,
"end" : 89
},
"caused_by" : {
"type" : "illegal_argument_exception",
"reason" : "cannot resolve symbol [params]"
}
},
"status" : 400
}
Is this possible to do with Elasticsearch 8.1?