综合练习
为课程 track 建搜索索引实验。
40 分钟
综合练习
本课串联 Mapping → 灌数 → 查询 → 聚合 → Spring 实验 API,为 CodeRoadMap 课程 track 建完整搜索索引。cf_track 仍在 MySQL,ES 只服务搜索实验。
学习目标
- 完成
tracks索引从 MySQL 导出到 ES 的全流程 - 实现关键词搜索 + category facet 聚合
- 可选:Spring Boot
/api/lab/search/tracks端点
核心内容
任务一:索引设计与全量导入
需求:将 MySQL cf_track 可搜索字段投影到 ES。
- 按 es-mapping PUT
tracksindex - 从 MySQL 导出并
_bulk导入(es-sync):
SELECT slug, title, summary, category, level, lesson_count, updated_at
FROM cf_track;
至少导入 10 条,含 spring-boot-essentials、mongodb-essentials、postgresql-essentials、elasticsearch-essentials。
任务二:搜索 + Facet
需求:模拟站内搜索框 + 左侧分类筛选。
curl -s -X POST "localhost:9200/tracks/_search" -H "Content-Type: application/json" -d '
{
"query": {
"bool": {
"must": [
{ "multi_match": { "query": "数据库", "fields": ["title^2", "summary"] } }
],
"filter": []
}
},
"aggs": {
"categories": { "terms": { "field": "category", "size": 20 } }
},
"highlight": { "fields": { "title": {}, "summary": {} } },
"size": 10
}'
变体:加 filter: [{ "term": { "category": "backend" } }],观察 hit 数与 agg 变化。
任务三(可选):Spring 实验 API
在 spring-boot-essentials 项目:
- 新增
TrackDocument、TrackSearchRepository(es-spring) GET /api/lab/search/tracks?q=&category=返回 JSON + facet- 不修改 现有
GET /tracks(MySQL)
Kibana Discover 验证(es-kibana)。验收:随机 3 条 slug 与 MySQL 一致;facet 计数与 GROUP BY category 吻合。