Milvus相似度搜索

2026-06-29 4
Milvus

类型:向量数据库

简介:存储、索引和管理由深度神经网络和机器学习(ML)模型生成的大规模嵌入向量。

本文介绍 Milvus 相似度搜索方法,包括查询向量生成、TopK 设置、标量过滤、返回字段配置、搜索结果验证和常见问题排查。

一、一次可用的搜索不只是返回结果

Milvus 相似度搜索的核心流程是:把用户问题转换成向量,再到 Collection 中查找相似向量。这个过程看起来简单,但真正可用的搜索还需要返回文本、来源、标题、版本和相似度等信息。

如果搜索只返回 ID,业务系统就很难使用。用户需要看到命中的内容来自哪里,前端也需要根据返回字段展示结果。

因此,一次完整搜索至少要考虑:

  1. 查询向量怎么生成;
  2. TopK 返回多少条;
  3. 是否需要过滤条件;
  4. 返回哪些字段;
  5. 如何判断结果是否可信。

二、查询向量要和入库向量保持一致

用户输入的问题不能直接拿去 Milvus 搜索,需要先用 Embedding 模型转换成查询向量。这个模型应与入库时使用的模型一致或兼容。

1、不要混用不同模型

如果入库时使用一个模型,查询时换成另一个模型,搜索结果可能明显变差。即使两个模型输出维度相同,也不代表向量空间一致。

2、查询文本也要清洗

用户问题里可能有多余符号、换行或无关内容。可以在生成查询向量前做轻量清洗,但不要过度改写用户意图。

三、TopK 设置要看使用场景

TopK 表示返回最相似的前几条结果。知识库问答、商品推荐和图片检索对 TopK 的需求不同。

1、知识库问答

知识库问答常从 3 到 10 开始测试。返回太少,可能漏掉答案;返回太多,后续生成回答或展示结果时容易混入噪声。

2、商品相似推荐

商品推荐可能需要更多候选结果,再结合价格、库存、分类和销量做二次排序。

3、内部搜索

内部搜索可以返回较多结果,让用户自行筛选。但前端要展示来源、摘要和匹配原因,不能只显示标题。

四、过滤条件能让搜索更精准

Milvus 支持在向量搜索中结合标量过滤。过滤条件适合限制搜索范围,例如只搜索某个文档、某个分类、某个语言、某个版本或某种状态的数据。

1、常见过滤字段

知识库场景可以按这些字段过滤:

  1. doc_id:只查某个文档;
  2. category:只查某个分类;
  3. language:只查某种语言;
  4. version:只查某个版本;
  5. status:只查 active 数据。

2、过滤条件不要过窄

如果过滤条件设置过窄,可能导致搜索没有结果。排查时可以先去掉过滤条件,确认基础向量搜索正常,再逐步加回条件。

五、返回字段决定结果能不能使用

搜索时应配置返回字段。知识库场景至少返回:

  1. 文本片段;
  2. 标题;
  3. 来源;
  4. 文档编号;
  5. 版本;
  6. 相似度或距离信息。

如果返回字段不足,即使 Milvus 找到了正确片段,前端也无法展示给用户。

1、面向用户的返回字段

面向用户展示时,标题、摘要、来源和链接很重要。用户需要判断结果是否可信。

2、面向系统的返回字段

面向系统处理时,doc_idchunk_idversionstatus 更重要。这些字段用于追踪、去重、更新和排查。

六、搜索结果要做二次判断

相似度搜索不是绝对答案。返回结果只是候选内容,业务系统还需要进一步判断。

可以从三个角度判断:

  1. 相似度是否足够高;
  2. 来源是否可信;
  3. 文本是否完整回答问题。

如果结果相似度不高,或命中内容只是关键词相似但语义无关,应用层应避免直接生成确定答案。

七、没有结果时怎么排查

1、先检查 Collection 是否已加载

如果 Collection 没有加载或服务状态异常,搜索可能无法正常执行。

2、再检查过滤条件

去掉过滤条件后重新搜索。如果能返回结果,说明问题可能出在过滤表达式或字段值上。

3、最后检查向量生成

确认查询向量维度正确,且使用了和入库一致的 Embedding 模型。

FAQ

Q1:TopK 设置多少合适?

A:没有固定值。知识库问答可以从 3 到 10 测试,再根据命中质量调整。

Q2:为什么搜索有结果但看不懂?

A:通常是返回字段配置不完整,需要返回文本、标题、来源等字段。

Q3:过滤条件会影响召回吗?

A:会。过滤条件越严格,搜索范围越小,可能提高精准度,也可能导致无结果。

  • 广告合作

  • QQ群号:4114653

温馨提示:
1、本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。邮箱:2942802716#qq.com(#改为@)。 2、本站原创内容未经允许不得转裁,转载请注明出处“站长百科”和原文地址。