MST

星途 面试题库

面试题:ElasticSearch重排序:如何基于自定义字段对搜索结果进行重排序

假设在ElasticSearch中有一个索引存储了商品信息,包含价格、销量等字段。现在要求先按照相关性得分进行初步排序,然后再基于销量对结果进行重排序,提高销量高的商品在搜索结果中的排名。请描述实现这一需求的具体步骤和涉及到的ElasticSearch API及参数设置。
40.2万 热度难度
数据库ElasticSearch

知识考点

AI 面试

面试题答案

一键面试
  1. 初步排序(按相关性得分)
    • 步骤:使用基本的搜索请求,Elasticsearch默认会按照相关性得分(_score)对搜索结果进行排序。
    • API及参数设置
{
    "query": {
        "match": {
            "your_search_field": "your_search_term"
        }
    }
}

这里your_search_field是商品信息中用于搜索的字段,your_search_term是具体的搜索词。

  1. 基于销量重排序
    • 步骤:使用function_score查询来进行重排序。在function_score中,可以定义权重函数来提升销量高的商品排名。
    • API及参数设置
{
    "query": {
        "function_score": {
            "query": {
                "match": {
                    "your_search_field": "your_search_term"
                }
            },
            "functions": [
                {
                    "field_value_factor": {
                        "field": "sales_volume", // 销量字段
                        "modifier": "log1p", // 可选择合适的修饰符,log1p可避免高销量商品权重过高
                        "missing": 1 // 销量缺失时的默认值
                    }
                }
            ],
            "boost_mode": "multiply" // 如何将权重与原始_score合并,multiply表示相乘
        }
    }
}

上述步骤中,先按相关性得分初步排序,然后通过function_score中的field_value_factor函数基于销量对结果进行重排序,提升销量高的商品排名。