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

ElasticSearch 8.12如何按字段值高低设置查询评分?

Elasticsearch 8.12 自定义评分:按字段值高低分配_score

要实现你需要的字段值越高、_score评分越高的效果,同时过滤掉不符合条件的文档,得用function_score查询——这是Elasticsearch里自定义文档评分的核心方案,之前用range+boost的方式只能给匹配的文档统一加权重,没法根据字段数值动态调整评分。

具体查询实现

下面的查询会先过滤出rating>=4且prev_rating>=4.1的文档,再根据这两个字段的数值高低计算最终_score:

{
  "query": {
    "function_score": {
      // 第一步:过滤符合条件的文档
      "query": {
        "bool": {
          "must": [
            {
              "range": {
                "prev_rating": {
                  "gte": 4.1
                }
              }
            },
            {
              "range": {
                "rating": {
                  "gte": 4
                }
              }
            }
          ]
        }
      },
      // 第二步:自定义评分规则
      "functions": [
        // 根据rating字段计算得分,factor是权重系数
        {
          "field_value_factor": {
            "field": "rating",
            "factor": 4,
            "modifier": "none"
          }
        },
        // 根据prev_rating字段计算得分,可按需调整权重
        {
          "field_value_factor": {
            "field": "prev_rating",
            "factor": 2,
            "modifier": "none"
          }
        }
      ],
      // 多个评分函数的组合方式:sum表示把两个函数的得分相加
      "boost_mode": "sum",
      // 只保留过滤后的文档,不符合条件的直接排除
      "min_score": 1
    }
  }
}

关键参数解释

  • field_value_factor:直接基于字段数值计算得分,公式是字段值 × factor,modifier可以加额外处理(比如log让高分增长放缓,sqrt弱化数值差异,这里用none就是直接相乘)
  • boost_mode:控制多个评分函数的结果如何合并,可选sum(相加)、multiply(相乘)、max(取最大值)等
  • min_score:设置最低得分阈值,不符合过滤条件的文档得分会是0,会被自动排除

调整得分范围

如果想要_score更接近你示例里的20、13、10,可以调整factor的数值:

  • 比如把rating的factor改成5,prev_rating的factor改成0,只基于rating计算:
    "functions": [
      {
        "field_value_factor": {
          "field": "rating",
          "factor": 5,
          "modifier": "none"
        }
      }
    ]
    
    这样id5的_score就是4.834×5≈24,id4是4.434×5≈22,id3是4.134×5≈20,再微调factor就能得到你想要的分数区间。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 00:22:31