加载中...
全文检索是数据库对文本内容进行分词、倒排索引和相关度排序的能力,支持比 LIKE 查询高效得多的关键词搜索,MySQL、PostgreSQL 都有内置实现,Elasticsearch 是最流行的专用引擎。

| 底层数据结构 | 倒排索引(Inverted Index) |
| MySQL 支持版本 | InnoDB FULLTEXT 索引(5.6+) |
| 专用引擎 | Elasticsearch(基于 Apache Lucene) |
全文检索的核心数据结构是倒排索引(Inverted Index):先对所有文档进行分词,建立「词到包含该词的文档列表」的映射。查询时对关键词在倒排索引里查对应的文档集合,多个关键词取交集或并集,速度极快,与文档数量基本无关。
相比之下,LIKE '%关键词%' 需要逐行扫描全表,无法利用任何索引(前缀 LIKE 如 '关键词%' 可以用索引,但中间和后缀匹配不行),数据量大时极慢。[1]
MySQL InnoDB 在 5.6 版本加入了 FULLTEXT 索引,支持 MATCH ... AGAINST 语法,但中文分词需要依赖 n-gram 分词器(MySQL 5.7+),分词粒度较粗。PostgreSQL 的全文检索功能更成熟,内置 tsvector 和 tsquery 类型,支持丰富的语言分词器,Zhparser 等扩展提供中文支持。
Elasticsearch(2010 年首发,基于 Lucene)是当前最流行的搜索引擎,提供分布式索引、实时搜索、多语言分词、聚合分析、同义词和模糊搜索等全套能力,被 GitHub、Wikipedia、Stack Overflow 等广泛使用。向量搜索加入后(8.0),Elasticsearch 也成为混合检索(关键词 + 语义向量)的重要平台。

| 底层数据结构 | 倒排索引(Inverted Index) |
| MySQL 支持版本 | InnoDB FULLTEXT 索引(5.6+) |
| 专用引擎 | Elasticsearch(基于 Apache Lucene) |
登录 后参与讨论
暂无讨论,来发表第一条评论吧