一,function_score
对字段进行关键字查询时,有时希望把另外一个没有作为查询字段的字段考虑进来,加入算分逻辑,这时可以用到function score。
使用function score 来调整查询结果的算分,影响的是查询结果的顺序。
比如根据下面的配置,算分的计算方法:
新的算分=旧的算分+log(1 + factor*total_quantity)
GET kibana_sample_data_ecommerce/_search
{
"query": {
"function_score": {
"query": {
"multi_match": {
"query": "Eddie",
"fields": ["customer_full_name", "manufacturer"]
}
},
"functions": [
{
"field_value_factor": {
// 查询结果重排序的依据
"field": "total_quantity",
//"modifier": "log1p", "factor": 1.2
// 修正公式
"modifier": "log2p",
// 修正因子,用log2(1.2 * doc['total_quantity'].value)
"factor": 1.2
}
}
],
// 算分 = 老算分 * log2(1.2 * doc['total_quantity'].value)
"boost_mode": "multiply",
"max_boost": 3
}
}
}
二,一致性随机函数
可能有这样的需求,对于不同的用户要展示不同的结果,对于同一个用户查询结果要相对稳定,此时一致性随机函数就派上用场了。
即在用户查询时,指定随机数,对同一个用户,这个随机数保持一致。
GET kibana_sample_data_ecommerce/_search
{
"query": {
"function_score": {
"query": {
"match": {
"customer_full_name": "Eddie"
}
},
"random_score": {
"seed": 223
}
}
}
}
使用一致性随机函数时,有一个报错,不知原因。