簡體   English   中英

Elasticsearch-在function_score中嵌套查詢Boost?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM