Elasticsearch 的`function_score`查询是一种强大的工具,允许用户在执行搜索时对文档的评分进行自定义调整。它不仅可以对查询结果进行过滤,还可以根据特定的函数对文档的评分进行修改,从而实现更灵活的搜索结果排序。
核心概念
`function_score`查询允许你定义一个基础查询(如`match_all`、`match`等),然后通过一个或多个函数来调整这些文档的评分。这些函数可以基于文档的字段值、随机性或其他逻辑来计算新的评分。
主要组成部分
1. 基础查询(Query):
• 定义了哪些文档可以被检索。可以是任何标准的 Elasticsearch 查询,如`match_all`、`match`、`term`等。
• 示例:`{"match_all": {}}`表示匹配所有文档。
2. 评分函数(Functions):
• 用于对匹配的文档计算新的评分。可以定义多个函数,并通过`score_mode`参数决定如何组合这些函数的评分。
• 常见的评分函数包括:
• `script_score`:通过脚本自定义评分逻辑。
• `weight`:为文档乘以一个固定的权重。
• `random_score`:为文档生成随机评分。
• `field_value_factor`:基于文档中的某个字段值调整评分。
• 衰减函数(`gauss`、`linear`、`exp`):根据字段值与某个原点的距离进行评分衰减。
3. 评分模式(Score Mode):
• 决定如何组合多个函数的评分结果。选项包括`multiply`(默认,相乘)、`sum`(相加)、`avg`(取平均)、`first`(取第一个匹配函数的评分)、`max`(取最大值)、`min`(取最小值)。
4. 提升模式(Boost Mode):
• 决定如何将函数计算出的评分与基础查询的评分结合。选项包括`multiply`(默认,相乘)、`replace`(