ElasticSearch:自定义评分功能、使用场景讲解以及 function_score常用的字段解释
在ElasticSearch中,自定义评分功能(function score query)允许你根据复杂的公式对文档进行重新评分。这可以用于实现例如Boosting Query、Field Value Factor、Decay Function等多种功能。
以下是一个使用function\_score的查询示例:
GET /_search
{
"query": {
"function_score": {
"query": {
"match": {
"message": "elk"
}
},
"functions": [
{
"filter": {
"match": {
"title": "Elasticsearch"
}
},
"weight": 2
},
{
"filter": {
"match": {
"title": "Logstash"
}
},
"weight": 3,
"boost_mode": "multiply"
}
],
"max_boost": 20,
"score_mode": "sum",
"boost_mode": "replace"
}
}
}
在这个查询中,我们首先执行一个match查询来找到所有包含"elk"的文档。然后,我们使用function\_score查询对这些文档进行评分。我们为标题中包含"Elasticsearch"的文档添加了2倍的权重,为标题中包含"Logstash"的文档添加了3倍的权重,并且通过boost_mode
指定了如何结合基础查询得分和函数得分。
使用场景:
- 根据用户的行为(点击、购买、评分等),调整搜索结果的排名。
- 根据文档的某些字段值(如销售量、评分),调整其相对重要性。
- 实现自定义的评分衰减函数,如距离衰减、Decay Function。
function\_score查询中常用的字段:
- query: 基础查询,用于找到所有符合条件的文档。
- functions: 一个数组,包含了所有用于重新评分的函数。每个函数包括filter、weight(或field)、script等。
- score\_mode: 定义如何计算最终得分,可以是
sum
、multiply
、min
、max
、avg
等。 - boost\_mode: 定义如何结合基础查询得分和函数得分,可以是
sum
、multiply
、replace
、sum_no_coord
、multiply_no_coord
等。 - max\_boost: 设置最大的提升倍数,防止提升过大。
注意:在使用function\_score时,确保你的用例确实需要复杂的评分逻辑,因为这可能会影响查询性能。
评论已关闭