field_value_factor如何在elasticsearch中工作?

use*_*047 3 elasticsearch elasticsearch-5

文档说使用field_value_factor值:

"field_value_factor": {
  "field": "popularity",
  "factor": 1.2,
  "modifier": "sqrt",
  "missing": 1
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

use*_*217 9

是的,你是在正确的方向.两个属性控制个体得分的总体组合和功能得分的得分以及自然评估的得分.他们是

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

  • boost_mode - 此变量控制如何组合查询分数和计算分数

参考

看看以下查询

{
    "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"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

function_score = score_linear * score_gauss * score_field_value_factor
Run Code Online (Sandbox Code Playgroud)

再次 - boost_mode是总和,所以我的最终得分将是按功能得分和查询得分评估的总得分的总和.

document_score = function_score + query_score.

谢谢