field_value_factor如何在elasticsearch中工作?

时间:2017-03-27 19:24:40

标签: elasticsearch elasticsearch-5

文档说使用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”]中定义的吗?

1 个答案:

答案 0 :(得分:9)

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

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

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

Reference

查看以下查询

WARNING: [192.168.2.50]:5703 [dev] [3.9-SNAPSHOT] EventQueue overloaded! Failed to process event packet sent from: [192.168.2.50]:5702

由于score_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"
        }
    }
}

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

document_score = function_score + query_score。

由于