【问题标题】:script_score query does not support [query]script_score 查询不支持 [查询]
【发布时间】:2021-11-08 15:40:23
【问题描述】:

**大家好,

我正在尝试使用脚本分数应用自定义分数,但我遇到了这个问题...非常感谢您的帮助

这是我正在使用的查询。

我的查询基于 Elastic 关于 script_score 的文档,其中包括 script_score 下的查询。 Heer 是指向 Elastic 文档的链接 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"
             }
          }
       ]
    }

我得到的错误。

    {
   "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
}

【问题讨论】:

  • 最好向我们展示发送到 Elasticsearch 的实际查询,而不是一些构建查询的 PHP 代码。
  • 感谢您的回复,如果您可以检查一下,我已经更新了我的问题
  • 尝试删除term 查询周围的bool 查询,以便script_score 直接包含term 查询。这有什么改变吗?
  • 不幸的是这并没有改变任何事情

标签: elasticsearch elastic-stack elk elasticsearch-dsl elasticsearch-7


【解决方案1】:

filter 是在你不想任何评分时使用,以便在不需要评分时更快响应,因为弹性不需要计算它

所以就像错误提示你需要使用must

【讨论】:

  • 感谢您的回复,我明白您的意思,但即使我没有任何过滤器......我也有同样的问题
  • 是的,您在 script_score 查询的子查询中有 -> bool -> filter
  • 我的意思是我试图将“过滤器”更改为“必须”,但问题总是一样的! script_score 查询不支持 [查询]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-08
  • 1970-01-01
  • 1970-01-01
  • 2015-06-24
  • 2015-10-28
  • 2021-11-04
  • 2020-07-31
相关资源
最近更新 更多