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

如何配置MongoDB Atlas Search实现关键词单次匹配并统一得分?

解决MongoDB Atlas Search关键词匹配次数不影响得分的问题

核心需求

  • 单个关键词搜索时,无论文档中关键词出现多少次,所有匹配文档的得分一致
  • 多个关键词搜索时,匹配关键词数量越多,文档得分越高(排名越靠前)

解决方案

使用Atlas Search的function_score查询,将每个关键词的匹配逻辑转化为二元判定(仅判断是否匹配,不统计出现次数),每个匹配成功的关键词贡献固定分数,最终得分为匹配关键词的分数总和。

步骤1:确认Atlas Search索引

确保已针对title和description字段创建了基础的Atlas Search索引(使用默认分析器即可,无需特殊配置)。

步骤2:构造自定义评分查询

示例1:搜索单个关键词"elephant"

db.collection.aggregate([
  {
    $search: {
      "function_score": {
        "query": "elephant",
        "functions": [
          {
            "filter": { "text": { "query": "elephant", "path": ["title", "description"] } },
            "score": { "constant": 1 }
          }
        ],
        "score_mode": "sum",
        "boost_mode": "replace"
      }
    }
  },
  { $project: { title: 1, description: 1, score: { $meta: "searchScore" } } }
])

此查询中,只要文档匹配"elephant"(无论出现多少次),就会获得1分。最终文档1和文档2的得分均为1,满足需求。

示例2:搜索多个关键词"duck elephant"

db.collection.aggregate([
  {
    $search: {
      "function_score": {
        "query": "duck elephant",
        "functions": [
          {
            "filter": { "text": { "query": "duck", "path": ["title", "description"] } },
            "score": { "constant": 1 }
          },
          {
            "filter": { "text": { "query": "elephant", "path": ["title", "description"] } },
            "score": { "constant": 1 }
          }
        ],
        "score_mode": "sum",
        "boost_mode": "replace"
      }
    }
  },
  { $project: { title: 1, description: 1, score: { $meta: "searchScore" } } }
])

每个关键词对应一个独立的匹配规则,匹配成功则加1分。文档2同时匹配两个关键词,得分为2;文档1仅匹配"elephant",得分为1,因此文档2排名更靠前。

关键参数说明

  • functions:定义一组评分规则,每个规则包含匹配条件和对应的固定加分值
  • score_mode: "sum":将所有匹配成功的规则得分累加,得到最终总分
  • boost_mode: "replace":用自定义计算的总分替换默认的TF-IDF得分,确保完全按照预设规则评分

注意事项

  • 若搜索关键词为动态输入,需根据关键词数量动态生成functions数组中的匹配规则
  • 确保索引的path覆盖所有需要匹配的字段(如示例中的title和description)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 18:24:31