如何在 Elasticsearch 查询中自定义评分规则?
如何在 Elasticsearch 查询中自定义评分规则?
回答重点
要在 Elasticsearch 查询中自定义评分规则,你可以使用 function_score 查询。function_score 查询允许你在查询结果的基础上,应用函数来修改文档的得分,从而实现自定义评分规则。以下是一个基本示例:
举个例子,假设你要在查询中增加某字段的权重,可以使用 weight 函数来实现:
1 | { |
在此例中,如果 important_field 字段为 true,则对应文档的评分会被乘以 2。
扩展知识
1)函数类型:
weight: 增加或减少评分的权重。field_value_factor: 使用字段的值来修改评分。random_score: 生成一个随机的评分。script_score: 使用自定义脚本来计算评分。
2)boost_mode:boost_mode 控制的是函数应用后的组合方式,可以选择的方式有:
multiply: 将原始评分乘以函数计算结果。sum: 将原始评分和函数计算结果相加。replace: 用函数计算结果替换原始评分。avg,max,min: 取平均值、最大值或最小值。
3)score_mode:score_mode 决定当多个函数匹配时,如何合并它们的结果:
multiply: 将所有函数的结果相乘。sum: 将所有函数的结果相加。avg: 取所有函数结果的平均值。first: 使用第一个函数的结果。max和min: 取最大值或最小值。
4)场景化实例:
假设我们有一个电商应用,我们想在搜索商品时,除了常规的匹配度外,还要考虑商品的销量和用户评分:
1 | { |
在上面的例子中,我们根据 sales 和 user_rating 两个字段对文档进行额外的评分调整,使得销量和用户评分较高的商品在搜索结果中更靠前。
Comments