You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Elasticsearch:按review_rating排序时如何置顶指定产品

解决方案:指定产品置顶+按评分排序

当然可以实现,不过你当前的脚本里有个问题:priority变量未定义,直接运行会报错。下面给你两种可行的修改方案:

方案一:直接修改排序规则(推荐)

不需要改动查询部分,直接在sort里增加一个脚本排序字段,把指定产品优先排在前面,之后再按review_rating降序排列:

GET products/_search
{
    "query": {
        "match_all": {}
    },
    "sort": [
        {
            "_script": {
                "type": "number",
                "script": {
                    "source": "params.top_product_ids.contains(doc['product_id'].value) ? 1 : 0",
                    "params": {
                        "top_product_ids": ["abc-xyz", "dfgh-rt"]
                    }
                },
                "order": "desc"
            }
        },
        {
            "review_rating": {
                "order": "desc"
            }
        }
    ]
}

原理:给指定产品标记为1,其他产品标记为0,降序排序后标记为1的产品会排在最前面,同一组内再按评分高低排序。

方案二:通过function_score调整得分后排序

如果你想保留function_score的逻辑,可以修正脚本并调整排序规则为按查询得分降序,同时保留评分排序作为次要规则:

GET products/_search
{
    "query": {
        "function_score": {
            "query": {
                "match_all": {}
            },
            "boost_mode": "sum",
            "functions": [
                {
                    "script_score": {
                        "script": {
                            "source": """
                                double boost = 0;
                                if (params.top_product_ids.contains(doc['product_id'].value)) {
                                    // 给置顶产品设置一个远高于普通评分的权重,确保排在前列
                                    boost = 1000;
                                }
                                // 叠加原有评分,保证置顶产品内部也按评分排序
                                return boost + doc['review_rating'].value;
                            """,
                            "lang": "painless",
                            "params": {
                                "top_product_ids": ["abc-xyz", "dfgh-rt"]
                            }
                        }
                    }
                }
            ]
        }
    },
    "sort": [
        { "_score": { "order": "desc" } },
        { "review_rating": { "order": "desc" } }
    ]
}

原理:给置顶产品添加一个超大的基础得分,让它们的总得分远高于其他产品,按总得分降序后自然置顶,同时同一组内仍按评分高低排序。

内容的提问来源于stack exchange,提问作者dtrix legend

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 21:06:21