我的问题是关于Elasticsearch中的boost函数(我已经阅读了他们的文档,现在还不清楚)。以下“boost_mode”:“sum”是否适用于比赛中的提升?或者,由于它在机柜外部,可能只是最终结果的总和,与默认结果相同。我有很多字段和值 vector -我希望评分是加法而不是乘法。如果以下操作不起作用-任何建议或指示,将不胜感激。谢谢!

"""
 |  "query": {
 |    "function_score": {
 |      "boost_mode": "sum",
 |      "query": {
 |        "bool": {
 |          "should": [
 |            { "match": { "someField":      { "query": "someValue",      "boost": 2 } } },
 |            { "match": { "someOtherField": { "query": "someOtherValue", "boost": 3 } } }
 |        }
 |      }
 |    }
 |  }
"""

最佳答案

way the sum boost mode works是根据以下公式计算分数:

queryBoost * (queryScore + Math.min(funcScore, maxBoost))

哪里:
  • queryBoost是函数得分内boost参数的值,因为没有,因此默认为1.0f
  • queryScore是查询的常规分数,在您的情况下,它是可变的,并且取决于搜索的术语以及您在boost查询中设置的其他match
  • funcScore是每个过滤器函数的得分相乘的结果,默认为1.0f
  • maxBoost是函数得分内max_boost参数的值,因为没有,因此默认为Float.MAX_VALUE

  • 还要注意的是,由于您没有过滤器功能,因此无需计算funcScore,总得分只是queryScore。因此,根据前面的内容,公式可以简化为
    queryScore
    

    最终,这意味着您的总体得分与查询得分直接相关

    一件好事也是在查询中传递?explain=true,以便您可以更深入地了解得分的计算方式。在您的情况下,由于没有过滤器功能,因此根本不使用boost_mode,而是返回查询分数。

    如果要在one or more score functions中添加functions参数,则结果可能会有所不同,因为可以计算出funcScore

    关于elasticsearch - Elasticsearch-在function_score中嵌套查询Boost?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32216187/

    10-11 09:09
    查看更多