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

如何基于最高分结果特征调整Elasticsearch查询的相关性评分?

方案合理性评估

你提的加权方案完全合理:

  • 6/4/2的权重梯度完全匹配「分类>属性>品牌」的业务优先级,符合你期望的同类型物料优先排序的需求
  • 加权总幅度(最高12分)低于你现有文本匹配的分差(示例中正确结果与普通结果分差为10分,多关键词场景分差更高),不会出现无文本匹配的同分类物料抢占正确Top1位置的问题
  • 不改变原有召回逻辑,仅调整排序,不会出现漏召回原本符合条件的结果的问题

实现方式

推荐采用两次查询的方案,实现成本极低,且兼容性好,无额外ES配置要求:

步骤1:获取Top1结果的维度值

先执行你的原有查询,仅返回1条结果,提取该结果的三个维度值:

  • nature.idCat(分类ID)
  • nature.idNat(属性ID)
  • marque.idMrq(品牌ID)

步骤2:带加权规则执行完整查询

在原有查询的bool语句中新增should子句,给三个维度的匹配规则设置对应权重即可,示例查询如下:

{
  "sort": [
    "_score"
  ],
  "query": {
    "bool": {
      "must": [
        // 保留原有所有查询条件不变
        {
          "query_string": {
            "default_field": "search",
            "query": "Photocopieur PANASONIC",
            "boost": 10
          }
        }
      ],
      // 新增加权规则
      "should": [
        {
          "term": {
            "nature.idCat": {
              "value": 26, // 替换为步骤1拿到的分类ID
              "boost": 6
            }
          }
        },
        {
          "term": {
            "nature.idNat": {
              "value": 665, // 替换为步骤1拿到的属性ID
              "boost": 4
            }
          }
        },
        {
          "term": {
            "marque.idMrq": {
              "value": 1244, // 替换为步骤1拿到的品牌ID
              "boost": 2
            }
          }
        }
      ],
      "minimum_should_match": 0 // 不强制匹配should规则,不缩小召回范围
    }
  }
}

额外优化建议

你当前用的通配符查询*photoc*在数据量较大时性能较差,可在ES7.12中给search字段配置NGram分词器,无需通配符即可实现中缀匹配,性能和评分准确性都会有明显提升。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 04:09:02