继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

提升MongoDB中的混合搜索:结合RRF、阈值和权重优化搜索效果

HUWWW
关注TA
已关注
手记 301
粉丝 37
获赞 133

在我的之前的文章里,我探讨了如何在MongoDB中实现基础混合搜索,结合了向量和文本搜索的能力(https://dev.to/shannonlal/optimizing-mongodb-hybrid-search-with-reciprocal-rank-fusion-4p3h)。虽然这种方法有效,但我在获取最相关结果时遇到了一些挑战。本文将讨论我实现的三项重要改进:互反排名融合(RRF)、相似度阈值和搜索类型的权重。

增强型混合搜索的三大关键要素

1. 双向排名融合 (RRF)

RRF 是一种技术,它帮助结合来自不同搜索方法的结果。通过考虑结果的排名位置,RRF 与简单相加分数不同,它使用一个公式来给予较高排名的结果更多权重,同时平滑分数差异。

    {
      $addFields: {
        vs_rrf_score: {
          $multiply: [
            0.4, // vectorWeight
            { $divide: [1.0, { $add: ['$rank', 60] }] },
          ],
        },
      },
    }

进入全屏模式 退出全屏模式

2. 相似度标准

为了确保高质量的搜索结果,我设置了向量搜索和文本搜索的分数最低阈值。

    // 向量搜索阈值 (Vector search threshold)
    {
      $match: {
        向量评分: { $gte: 0.9 }
      }
    }

    // 文本匹配阈值 (Text match threshold)
    {
      $match: {
        文本评分: { $gte: 0.5 }
      }
    }

切换到全屏模式 退出全屏

这可以防止低质量的匹配出现在结果中,即使它们的RRF计算结果有所提升。比如在之前的例子中,我将向量相似度得分设为0.9,文本相似度得分设为0.5;不过你可以根据自己的数据和搜索效果来调整这些数值。

3. 加权搜索类型

对于不同的查询,不同的搜索类型表现更好。我实现了权重来平衡它们的贡献程度。

    {
      $addFields: {
        combined_score: {
          $add: [
            { $multiply: [{ $ifNull: ['$vectorScore', 0] }, 0.4] }, // 向量得分乘以0.4
            { $multiply: [{ $ifNull: ['$textScore', 0] }, 0.6] }   // 文本得分乘以0.6
          ]
        }
      }
    }

全屏模式,退出

在这个例子中,我更重视文本搜索结果,相比之下减少了向量查找的权重,你可以根据自己的测试结果来调整权重。

把一切都放在一起

下面是一个简化的整个流程:

    [
      // 带有阈值的向量搜索
      {
        $vectorSearch: {
          index: 'ai_image_vector_description',
          path: 'descriptionValues',
          queryVector: embedding,
          filter: {
            userId: userId,
            deleted: false,
          }
        }
      },
      { $match: { vectorScore: { $gte: 0.9 } } },
      // 向量搜索中的RRF计算
      {
        $group: {
          _id: null,
          docs: { $push: '$ROOT' }
        }
      },
      // ... RRF计算阶段(与向量搜索类似)...
      {
        $unionWith: {
          // 相似结构的文本搜索管道
        }
      },
      // 最终组合和排序步骤
      {
        $sort: { combined_score: -1 }
      }
    ]

点击这里切换到全屏模式,再点击这里退出全屏模式

好处和成果

这种方法带来了几项优势,

  1. 通过同时考虑排名位置和原始分数获得更相关的结果
  2. 通过设定最低门槛进行质量控制
  3. 灵活调整权重以适应不同应用场景

这些技术的组合显著提升了我们的搜索效果,尤其是在简单分数相加的方法未能获得最佳排序的搜索请求中。

下一步是

未来可能的一些改进包括:

  • 根据查询特征动态调整权重
  • 除了简单的阈值外,还包括更多的质量指标
  • 针对大规模数据集的性能优化

通过实施这些改进,我们打造了一个更加强大和可靠的混合型搜索系统,更好地满足了用户的需求。

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP