0

**Hey everyone,

i'm trying to apply a custom score using script score but i'm facing this issue...i would really appreciate your help

Here's the query i'm using for that.

my query was based on the documentation of Elastic about script_score which includes a query under script_score. Heer is the link to Elastic documentation Script_score query documentation **

{
       "from":0,
       "size":6,
       "query":{
          "bool":{
             "must":{
                "function_score":{
                   "score_mode":"sum",
                   "boost_mode":"replace",
                   "functions":[
                      {
                         "weight":0
                      },
                      {
                         "script_score":{
                            "query":{
                               "bool":{
                                  "filter":{
                                     "term":{
                                        "title":"jordan"
                                     }
                                  }
                               }
                            },
                            "script":{
                               "source":"params.termFreq * Math.log10((params.doCount - (params.allDocFreq  * params.numDocs\/params.maxDocs) + 1) \/ (params.allDocFreq * params.numDocs\/params.maxDocs)) \/ Math.log10(1 + params.doCount) * 1000 \/5",
                               "params":{
                                  "termFreq":1278,
                                  "titleDocFreq":1274,
                                  "allDocFreq":3630,
                                  "doCount":3909828,
                                  "numDocs":4492778,
                                  "maxDocs":4497180
                               }
                            }
                         }
                      },
                      {
                         "script_score":{
                            "query":{
                               "bool":{
                                  "filter":{
                                     "term":{
                                        "title":"faithful"
                                     }
                                  }
                               }
                            },
                            "script":{
                               "source":"params.termFreq * Math.log10((params.doCount - (params.allDocFreq  * params.numDocs\/params.maxDocs) + 1) \/ (params.allDocFreq * params.numDocs\/params.maxDocs)) \/ Math.log10(1 + params.doCount) * 1000 \/5",
                               "params":{
                                  "termFreq":61,
                                  "titleDocFreq":61,
                                  "allDocFreq":391,
                                  "doCount":3909828,
                                  "numDocs":4492778,
                                  "maxDocs":4497180
                               }
                            }
                         }
                      },
                      {
                         "script_score":{
                            "query":{
                               "bool":{
                                  "filter":{
                                     "term":{
                                        "title":"return"
                                     }
                                  }
                               }
                            },
                            "script":{
                               "source":"params.termFreq * Math.log10((params.doCount - (params.allDocFreq  * params.numDocs\/params.maxDocs) + 1) \/ (params.allDocFreq * params.numDocs\/params.maxDocs)) \/ Math.log10(1 + params.doCount) * 1000 \/5",
                               "params":{
                                  "termFreq":1857,
                                  "titleDocFreq":1856,
                                  "allDocFreq":5334,
                                  "doCount":3909828,
                                  "numDocs":4492778,
                                  "maxDocs":4497180
                               }
                            }
                         }
                      },
                      {
                         "script_score":{
                            "query":{
                               "bool":{
                                  "filter":{
                                     "term":{
                                        "title":"pray"
                                     }
                                  }
                               }
                            },
                            "script":{
                               "source":"params.termFreq * Math.log10((params.doCount - (params.allDocFreq  * params.numDocs\/params.maxDocs) + 1) \/ (params.allDocFreq * params.numDocs\/params.maxDocs)) \/ Math.log10(1 + params.doCount) * 1000 \/5",
                               "params":{
                                  "termFreq":188,
                                  "titleDocFreq":188,
                                  "allDocFreq":421,
                                  "doCount":3909828,
                                  "numDocs":4492778,
                                  "maxDocs":4497180
                               }
                            }
                         }
                      },
                      {
                         "script_score":{
                            "query":{
                               "bool":{
                                  "filter":{
                                     "term":{
                                        "title":"mosques"
                                     }
                                  }
                               }
                            },
                            "script":{
                               "source":"params.termFreq * Math.log10((params.doCount - (params.allDocFreq  * params.numDocs\/params.maxDocs) + 1) \/ (params.allDocFreq * params.numDocs\/params.maxDocs)) \/ Math.log10(1 + params.doCount) * 1000 \/5",
                               "params":{
                                  "termFreq":61,
                                  "titleDocFreq":61,
                                  "allDocFreq":182,
                                  "doCount":3909828,
                                  "numDocs":4492778,
                                  "maxDocs":4497180
                               }
                            }
                         }
                      }
                   ],
                   "query":{
                      "match":{
                         "title":{
                            "query":"jordan faithful return pray mosques",
                            "minimum_should_match":2
                         }
                      }
                   }
                }
             }
          }
       },
       "track_scores":true,
       "min_score":38,
       "sort":[
          {
             "unknown_language":{
                "order":"asc"
             }
          },
          {
             "_score":{
                "order":"desc"
             },
             "release_time":{
                "order":"desc"
             }
          }
       ]
    }

the error i get.

    {
   "error":{
      "root_cause":[
         {
            "type":"parsing_exception",
            "reason":"script_score query does not support [query]",
            "line":1,
            "col":156
         }
      ],
      "type":"x_content_parse_exception",
      "reason":"[1:156] [bool] failed to parse field [must]",
      "caused_by":{
         "type":"parsing_exception",
         "reason":"script_score query does not support [query]",
         "line":1,
         "col":156
      }
   },
   "status":400
}
EdZ
  • 23
  • 4
  • It would be much better to show us the actual query that is sent to Elasticsearch instead of some PHP code that constructs a query. – ba0708 Sep 13 '21 at 12:47
  • thakns for your reply, i've updated my question if you could check it – EdZ Sep 13 '21 at 12:57
  • Try to remove the `bool` query surrounding your `term` queries, so that `script_score` contains a `term` query directly. Does that change anything? – ba0708 Sep 15 '21 at 11:50
  • unfortunately that doesn't change anything – EdZ Sep 15 '21 at 16:37

1 Answers1

1

filter is to use when you do not want any scoring, for a faster response when scoring is not needed, since elastic do not need to calculate it

So like suggest by the error you need to use must

ExploZe
  • 426
  • 4
  • 9
  • thanks for your reply, i get your point but even if i don't have any filter... i have the same problem – EdZ Sep 13 '21 at 13:32
  • Yes you have in sub queries of script_score query -> bool -> filter – ExploZe Sep 13 '21 at 14:33
  • i mean i tried to change 'filter' by 'must' but the problem is always the same! script_score query does not support [query] – EdZ Sep 15 '21 at 10:19