搜索引擎是什么
全文检索 vs SQL LIKE;适用场景。
30 分钟
搜索引擎是什么
Elasticsearch(ES)是分布式全文检索与分析引擎,基于 Apache Lucene。学完 sql-essentials 后,本 track 帮你理解:何时 SQL 不够、何时需要专用搜索引擎。
学习目标
- 区分全文检索与 SQL
LIKE/ 索引扫描 - 列出 ES 的典型适用场景与反模式
- 明确 CodeRoadMap MySQL 8 仍为权威数据源,ES 用于搜索实验
核心内容
全文检索 vs SQL LIKE
| 维度 | MySQL LIKE '%关键词%' | Elasticsearch |
|---|---|---|
| 索引结构 | B+Tree,前缀可走索引 | 倒排索引(词 → 文档列表) |
| 分词 | 无内置中文分词 | analyzer 可配置 ik 等 |
| 相关性排序 | 难做 TF-IDF / BM25 | _score 内置 |
| 模糊/同义词 | 正则或应用层 | fuzziness、synonym filter |
| 事务 | ACID | 近实时,最终一致 |
-- MySQL:全表扫描或有限索引,难排序「最相关」
SELECT slug, title FROM cf_track
WHERE title LIKE '%Spring%' OR summary LIKE '%Spring%';
curl -s -X GET "localhost:9200/tracks/_search" -H "Content-Type: application/json" -d '
{
"query": {
"multi_match": {
"query": "Spring Boot",
"fields": ["title^2", "summary"]
}
}
}'
适用场景
- 站内搜索:课程、文档、FAQ 关键词检索
- 日志分析:ELK 栈(本 track 侧重搜索,日志见运维路线)
- 推荐/标签聚合:与 es-agg 配合
在本站架构里
Next.js 主站 → Spring Boot REST → MySQL 8(cf_track、cf_lesson 权威)
↓ 异步同步(实验)
Elasticsearch(tracks 搜索索引)
不要把 cf_track 主库迁到 ES。与 mongodb-essentials 文档库、postgresql-essentials 实验 PG 一样,ES 是 能力扩展,非 OLTP 替代。
何时不必上 ES
- 数据量小、查询简单,MySQL 全文索引或 PG
tsvector够用 - 强一致读写、复杂 JOIN——继续 spring-boot-essentials JPA + MySQL