field_value_factor 在 elasticsearch 中如何工作?

how does field_value_factor work in elasticsearch?

文档说使用 field_value_factor 值:

"field_value_factor": {
  "field": "popularity",
  "factor": 1.2,
  "modifier": "sqrt",
  "missing": 1
}

"这将转化为以下评分公式:

sqrt(1.2 * doc['popularity'].value)

但是我不明白 sqrt(1.2 * doc['popularity'].value) 做了什么?是否乘以每次命中的原始分数来创建新分数?添加了吗?我可以更改乘法还是加法吗?

这是function_score["boost_mode"]中定义的吗?

是的,您的方向是正确的。两个属性控制单个分数的整体组合以及功能分数和自然评估分数的分数。他们是

  • score_mode - 此变量控制计算分数的组合方式:

  • boost_mode - 此变量控制查询分数和计算分数的组合方式

Reference

看看下面的查询

{
    "query": {
        "function_score": {
            "query": {
                "match_all": {}
            },
            "functions": [{
                "field_value_factor": {
                    "field": "popularity",
                    "factor": 1.2,
                    "modifier": "sqrt",
                    "missing": 1
                }
            }, {
                "linear": {
                    "distance": {
                        "origin": "0",
                        "scale": "0.4"
                    }
                }
            }, {
                "gauss": {
                    "price": {
                        "origin": "0",
                        "scale": ".08"
                    }
                }
            }],
            "score_mode": "multiply",
            "boost_mode": "sum"
        }
    }
}

由于score_mode是乘法,你可以看到我的函数分数查询中有三个函数,所以这将乘以每个函数的分数

function_score = score_linear * score_gauss * score_field_value_factor

同样 - boost_mode 是总和,所以我的最终分数将是函数分数和查询分数评估的总分的总和。

document_score = function_score + query_score.

谢谢