不是关键词匹配:语义搜索怎么理解你的内容-1
title: "不是关键词匹配:语义搜索怎么理解你的内容" date: 2026-09-17 tags: [语义搜索, 向量检索, FTS5, RRF, AI能力] category: AI能力 description: "传统搜索按关键词匹配,爱库录的搜索理解你的意思。FTS5 + 向量余弦 + RRF 融合,真正基于内容理解的站内搜索。"
不是关键词匹配:语义搜索怎么理解你的内容
试过在自己的博客里搜东西吗?
用 WordPress,搜「容器化部署」,如果文章标题和正文里没有「容器化部署」这四个字,就搜不到。即使那篇文章讲的就是 Docker 部署。
关键词匹配的根本问题:它找的是「字」,不是「意思」。
传统搜索的局限
用户搜索:怎么让博客上线
期望结果:那篇讲 Nginx 反代配置的文章
实际结果:无匹配(文章里没有「博客上线」这几个字)
用户搜索:容器化部署
期望结果:Docker 多阶段构建实战
实际结果:无匹配(文章用的是「Docker」不是「容器化」)
用户要换好几次关键词才能找到想要的内容。这不是搜索,是猜谜。
爱库录的三通道融合
爱库录的搜索不是单一引擎,而是三个通道的结果融合:
通道一:FTS5 全文索引
SQLite 内置的全文搜索引擎。对文章内容做分词,建立倒排索引。
擅长: 精确匹配关键词、短语搜索、布尔组合。
搜索:Go 并发 errgroup
FTS5 结果:包含这三个词的文章,按相关性排序
通道二:向量语义检索
把查询和文章都转成向量(embedding),计算余弦相似度。
擅长: 理解语义、跨语言、同义词。
搜索:怎么让博客上线
向量结果:找到语义相近的文章,即使没有完全匹配的关键词
通道三:RRF 融合排序
RRF(Reciprocal Rank Fusion)把两个通道的结果合并成一个统一排名。
FTS5 排名:文章A(#1), 文章B(#3), 文章C(#5)
向量排名:文章B(#1), 文章A(#2), 文章D(#4)
RRF 融合:文章A(最高), 文章B(次高), 文章C, 文章D
两个通道互相补充。 FTS5 确保精确匹配不丢,向量确保语义相近的不漏。
实际效果演示
场景一:用自然语言找文章
搜索:「那篇讲目录结构怎么变成网站的」
→ 找到:拖个文件进目录,就是发布了一篇博客
文章里没有「目录结构怎么变成网站」这句话,但向量检索理解了你的意思。
场景二:同义词
搜索:容器化
→ 找到:Docker 多阶段构建实战
「容器化」和「Docker」在向量空间里距离很近。
场景三:跨文章召回
搜索:「数据备份怎么做」
→ 找到:
1. 13MB 单二进制部署(提到备份策略)
2. 这个博客是怎么搭的(提到 rsync 备份)
3. 数据永远在自己手里(专门讲数据主权)
不是找一篇文章,是把所有相关内容都找出来。
Agent 侧再 rerank
在 Agent 工具链场景下,搜索结果还会经过 reranker 二次排序。
reranker 不是看「查询和文章各有多长的向量」,而是真正「阅读」查询和文章的内容,给出更精确的相关性分数。
原始查询:我写过哪些关于部署的内容
向量检索:返回 10 篇可能相关的文章
reranker:逐篇阅读,筛选出最相关的 3 篇
搜索不是一步到位,是层层筛选。
为什么这很重要
站内搜索是博客的基础设施。搜索不好用,知识库就是死的——存进去找不到,等于没存。
传统关键词搜索的体验是:记得关键词 → 能找到。不记得 → 找不到。
语义搜索的体验是:用大白话描述你要找的东西 → 找到。
从「猜关键词」到「说意思」,这是本质的区别。
了解更多:
[[文章入库,AI 自动帮你摘要、打标签、建图谱]]— 看看入库时做了哪些预处理。