解决图像和关键词基于房产搜索中的延迟和分页问题

发布: (2025年12月26日 GMT+8 11:14)
4 分钟阅读
原文: Dev.to

Source: Dev.to

所有权与方法

作为高级软件工程师,我承担了修复 Deep Search 的性能和正确性的问题。

一个关键决定是保持系统的确定性,避免使用 LLM 进行排序或检索。LLM 虽然有用,但它们是非确定性的,且在大规模时难以控制。

我仅在理解用户意图时使用 LLM。LLM 解析用户查询并提取:

  • 像卧室数量或位置这样的硬过滤条件
  • 一个标记,指示是否需要基于图像的搜索

示例

  • “2 bedroom apartment in Manhattan” → 仅使用确定性过滤和关键词搜索
  • “2 bedroom house with backyard having large trees” → 需要视觉理解并触发 Deep Search

这种受限的 LLM 使用,使得系统的其余部分可预测且易于调试。

实施过程中发现的挑战

在重新设计系统时,我发现了一个关于如何合并不同检索系统结果的重大问题。

  • BM25 搜索有其自己的排序和分页。
  • Vector 搜索也有其自己的排序和分页。

当先对结果进行分页再合并时,分页完全失效。BM25 的第 2 页和向量搜索的第 2 页并不代表相同的结果集。有的页面主要是向量匹配,有的则没有,且排序在请求之间会变化。这导致结果不稳定且不一致,在生产搜索系统中是不可接受的。

该问题需要重新思考排序和分页的处理方式。

解决方案

当触发 Deep Search 时,我构建了一个具有明确职责分离的混合搜索管道:

  1. 硬确定性过滤
  2. 使用 RedisSearch 的 BM25 全文搜索
  3. 使用 pgvector 对房产图片进行 向量搜索

关键的改变是这些系统不再各自独立分页。

合并结果

我实现了 Reciprocal Rank Fusion(倒数排名融合)来合并来自不同搜索引擎的排序列表。对每个房产,计算一个统一的混合分数:

  • BM25 排名转换为倒数得分
  • 向量相似度得分进行归一化

根据是否触发 Deep Search,应用不同的权重:

# Hybrid scoring formula
hybridScore = alphaBM25 * bm25Score + betaVector * (vecScore / maxVec)

只有在计算出统一的混合分数后才进行分页。这保证了跨页的排序稳定。

结果

新的方法解决了性能和排序问题:

  • 延迟 从约 5 分钟降至 10 秒以内
  • 分页 稳定且确定
  • 当用户请求视觉特征时,视觉匹配自然出现
  • 关键词意图仍然影响排序
  • 结果在各页之间保持一致
Back to Blog

相关文章

阅读更多 »