es function_score自定义计算得分函数;aggs聚合操作

1、function_score

参考:https://segmentfault.com/a/1190000037700644
https://blog.csdn.net/lijingjingchn/article/details/106405577

function_score 查询 是用来控制评分过程的终极武器,它允许为每个与主查询匹配的文档应用一个函数,以达到改变甚至完全替换原始查询评分 _score 的目的。

*** 单个加强函数的查询模板

GET 127.0.0.1/mytest/doc/_search
{
    "query": {
        "function_score": {
            "query": {.....}, //主查询,查询完后这裡自己会有一个评分,就是old_score
            "field_value_factor": {...}, //在old_score的基础上,给他加强其他字段的评分,这裡会产生一个加强score
,如果只有一个加强function时,直接将加强函数名写在query下面就可以了
            "boost_mode": "multiply", //指定用哪种方式结合old_score和加强score成为new_score
            "max_boost": 1.5 //限制加强score的最高分,但是不会限制old_score
        }
    }
}

***functions 多个加强函数的查询模板

GET 127.0.0.1/mytest/doc/_search
{
    "query": {
        "function_score": {
            "query": {.....},
            "functions": [   //可以有多个加强函数(或是filter+加强函数),每一个加强函数会产生一个加强score,因
此functions会有多个加强score
                { "field_value_factor": ... },
                { "gauss": ... },
                { "filter": {...}, "weight": ... }
            ],
            "score_mode": "sum", //决定加强score们怎麽合併,
            "boost_mode": "multiply" //決定總加強score怎麼和old_score合併
        }
    }
}

score_mode

score_mode 设置为了 max,意思是取两个打分函数的最大值作为 func_score,对应上述假设也就是 2.3 和 42 两者中的最大值,即 func_score = 42

boost_mode 设置为了 multiply,就是把原来的 query_score 与 func_score 相乘就得到了最终的 score 分数。

参数 score_mode 指定多个打分函数如何组合计算出新的分数:

multiply : 分数相乘(默认)
sum : 相加
avg : 加权平均值
first : 使用第一个 filter 函数的分数
max : 取最大值
min : 取最小值
为了避免新的分数的数值过高,可以通过 max_boost 参数去设置上限。

boost_mode:

最终的分数 result_score 是由 query_score 与 func_score 进行计算而来,计算方式由参数 boost_mode 定义:

multiply : 相乘(默认),result_score = query_score * function_score
replace : 替换,result_score = function_score
sum : 相加,result_score = query_score + function_score
avg : 取两者的平均值,result_score = Avg(query_score, function_score)
max : 取两者之中的最大值,result_score = Max(query_score, function_score)
min : 取两者之中的最小值,result_score = Min(query_score, function_score)

function_score

function_score 提供了以下几种打分的函数:

weight : 加权。
random_score : 随机打分。
field_value_factor : 使用字段的数值参与计算分数。
decay_function : 衰减函数 gauss, linear, exp 等。
script_score : 自定义脚本。

**例子中的 weight 是 5 ,即自定义函数得分 func_score = 5 ,最终结果的 score 等于 query_score * 5 。

{
  "query": {
    "function_score": {
      "query": { "match": { "message": "elasticsearch" } },
      "weight": 5
    }
  }
}

2、aggs

参考:https://zhuanlan.zhihu.com/p/37500880

es的aggs可以分为度量聚合和桶聚合

度量聚合:min、max、sum、avg聚合, 度量聚合接收一个输入文档集并生成至少一个统计值

{

"aggs" : {

"avg_grade" : { "avg" : { "field" : "grade" } }

}}

桶聚合:term、range聚合,返回很多子集,并限定输入数据到一个特殊的叫做桶的子集中。可以把桶聚合想象成类似前面切面功能的东西

"aggs": {

"sum_logtype": {

"terms": {

"field": "log_type"

} } }}

Guess you like

Origin blog.csdn.net/weixin_42357472/article/details/121222067