Skip to content

搜索引擎原理

前言

你在淘宝搜"红色连衣裙",0.1 秒内从几十亿商品中找到了最相关的结果——这背后是怎么做到的? 搜索引擎是互联网最核心的基础设施之一,从 Google 到电商站内搜索,它的核心原理都是一样的:倒排索引 + 相关性排序。

这篇文章会带你学什么?

学完这章后,你将获得:

  • 倒排索引:理解搜索引擎最核心的数据结构
  • 分词技术:了解中文分词的挑战和常见方案
  • 相关性排序:掌握 TF-IDF 和 BM25 的基本原理
  • Elasticsearch:了解最流行的搜索引擎的架构和使用场景
  • 搜索优化:掌握同义词、纠错、高亮等实用搜索功能
章节内容核心概念
第 1 章倒排索引正排索引 vs 倒排索引
第 2 章分词与分析中文分词、停用词、词干提取
第 3 章相关性排序TF-IDF、BM25
第 4 章Elasticsearch分布式架构、分片、副本
第 5 章搜索优化同义词、纠错、自动补全

0. 全景图:搜索的本质是什么?

搜索的本质是一个信息检索(Information Retrieval)问题:给定一个查询,从海量文档中找到最相关的结果,并按相关性排序返回。

这个过程分为两个阶段:

  • 索引阶段(离线):提前把所有文档处理好,建立高效的查找结构
  • 查询阶段(在线):用户输入关键词时,快速找到匹配的文档并排序

为什么不能用数据库 LIKE 查询?

SELECT * FROM products WHERE name LIKE '%红色连衣裙%' 看起来能搜索,但它需要全表扫描——逐行检查每条记录。当数据量达到百万级时,这种查询会慢到不可用。倒排索引把这个 O(n) 的操作变成了 O(1) 的查找。


1. 倒排索引:搜索引擎的"心脏"

传统数据库用的是正排索引:从文档 ID 找到文档内容。而搜索引擎用的是倒排索引:从关键词找到包含它的文档列表。

倒排索引 (Inverted Index)
输入搜索词,观察倒排索引如何工作
原始文档
Doc 1苹果是一种常见的水果
Doc 2苹果公司发布了新款手机
Doc 3我喜欢吃水果和蔬菜
Doc 4这款手机的价格很实惠
Doc 5水果店里有苹果和香蕉
倒排索引表
苹果[1][2][5]
水果[1][3][5]
手机[2][4]
公司[2]
发布[2]
喜欢[3]
蔬菜[3]
价格[4]
实惠[4]
香蕉[5]
常见[1]
索引类型方向查找方式适用场景
正排索引文档 → 内容知道 ID,查内容数据库主键查询
倒排索引关键词 → 文档列表知道关键词,查文档全文搜索

倒排索引的构建过程

  1. 文档收集:获取所有需要被搜索的文档
  2. 分词(Tokenization):将文档拆分为一个个词语
  3. 建立映射:记录每个词语出现在哪些文档中(以及出现位置、频率等)
  4. 持久化存储:将索引写入磁盘,支持快速查找

2. 分词与文本分析

分词是搜索引擎的第一步,也是中文搜索的最大挑战。英文天然以空格分词,但中文没有分隔符——"乒乓球拍卖了"可以分成"乒乓球/拍卖/了"或"乒乓/球拍/卖/了"。

分词方式说明示例
标准分词按空格和标点切分(英文)"hello world" → ["hello", "world"]
中文分词基于词典或模型切分"搜索引擎" → ["搜索", "引擎"]
N-gram按固定长度滑动窗口切分"搜索" → ["搜索", "索引"]
自定义词典添加业务专有词汇"iPhone16ProMax" 作为一个词

文本分析管道

分词只是文本分析的一步,完整的管道包括:

  1. 字符过滤:去除 HTML 标签、特殊字符
  2. 分词:将文本拆分为词语(Token)
  3. 停用词过滤:去除"的"、"了"、"是"等无意义的高频词
  4. 同义词扩展:将"手机"扩展为"手机、电话、移动电话"
  5. 词干提取:将 "running" 还原为 "run"(英文)

3. 相关性排序:哪个结果最"相关"?

找到匹配的文档只是第一步,更重要的是排序——把最相关的结果排在最前面。

算法原理特点
TF-IDF词频(TF) × 逆文档频率(IDF)经典算法,简单有效
BM25TF-IDF 的改进版,加入文档长度归一化Elasticsearch 默认算法
向量检索将文档和查询转为向量,计算余弦相似度支持语义搜索

TF-IDF 直觉理解

  • TF(词频):一个词在文档中出现越多次,这个文档越可能与该词相关
  • IDF(逆文档频率):一个词在越少的文档中出现,它的区分度越高
  • "的"在所有文档中都出现(IDF 低),所以搜索"的"没有意义
  • "Elasticsearch"只在少数文档中出现(IDF 高),搜索它能精确定位

4. Elasticsearch:最流行的搜索引擎

Elasticsearch 是目前最流行的开源搜索引擎,基于 Apache Lucene 构建,提供分布式、RESTful API 的全文搜索能力。

概念说明
Index类似数据库的"表",存储同类文档
Document一条记录,JSON 格式
Shard分片,将索引拆分到多个节点
Replica副本,提供高可用和读扩展
Mapping字段类型定义,类似数据库 Schema
Analyzer文本分析器,定义分词规则

ES vs 数据库

Elasticsearch 不是用来替代数据库的,而是作为搜索层与数据库配合使用。典型架构:数据写入数据库 → 同步到 ES → 搜索请求走 ES → 详情请求走数据库。


5. 搜索优化:让搜索更"聪明"

优化手段说明效果
同义词"手机"也能搜到"电话"提高召回率
拼写纠错"iphoen" 自动纠正为 "iphone"容错性
自动补全输入"苹"提示"苹果手机"提升体验
高亮搜索结果中标红匹配词直观展示
权重调整标题匹配权重 > 内容匹配提高精确度
过滤与聚合按价格区间、品牌筛选缩小范围

总结

搜索引擎是互联网应用的核心基础设施。理解倒排索引、分词、相关性排序这三个核心概念,就掌握了搜索引擎的本质。

回顾本章的关键要点:

  1. 倒排索引:从关键词到文档的反向映射,是搜索引擎的核心数据结构
  2. 分词是基础:中文分词是搜索质量的关键,需要选择合适的分词器
  3. BM25 排序:基于词频和文档频率的相关性评分,是 ES 的默认算法
  4. ES 架构:分片 + 副本实现分布式和高可用
  5. 搜索优化:同义词、纠错、补全让搜索更智能

延伸阅读