[英]Elasticsearch - Nested Query Boost in function_score?
我的問題是關於Elasticsearch中的boost函數(我已經閱讀了他們的文檔,現在還不清楚)。 以下“ boost_mode”:“ sum”是否適用於比賽中的提升? 或者,由於它在機櫃外部,可能只是最終結果的總和,與默認結果相同。 我有很多字段和值向量-我希望得分是加性而不是乘法。 如果以下操作不起作用-任何建議或指示,將不勝感激。 謝謝!
"""
| "query": {
| "function_score": {
| "boost_mode": "sum",
| "query": {
| "bool": {
| "should": [
| { "match": { "someField": { "query": "someValue", "boost": 2 } } },
| { "match": { "someOtherField": { "query": "someOtherValue", "boost": 3 } } }
| }
| }
| }
| }
"""
sum
提升模式的工作方式是根據以下公式計算分數:
queryBoost * (queryScore + Math.min(funcScore, maxBoost))
哪里:
queryBoost
是函數得分內boost
參數的值,因為沒有,所以默認為1.0f
queryScore
是查詢的正常分數,在您的情況下,它是可變的,取決於搜索字詞以及您在match
查詢中設置的額外boost
funcScore
是每個過濾器函數的分數相乘的結果,默認為1.0f
maxBoost
是函數得分內max_boost
參數的值,因為沒有,因此默認為Float.MAX_VALUE
還要注意的是,由於沒有過濾器功能,因此無需計算funcScore
,而總分數只是queryScore
。 因此,根據前面的內容,公式可以簡化為
queryScore
最終,這意味着您的總體分數與您的查詢分數直接相關
一件好事是在查詢中傳遞?explain=true
,這樣您就可以洞悉如何計算分數。 在您的情況下,由於沒有過濾器功能,根本不使用boost_mode
,而是返回查詢分數。
如果要添加一個或多個得分函數的functions
參數,則結果可能會有所不同,因為可以計算funcScore
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.