我的问题是关于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/