1 · 准备工作
-
运行环境
curl -fsSL https://elastic.co/start-local | sh # 一条命令拉起本地单节点集群 # 浏览器打开 http://localhost:5601 进入 Kibana → DevTools → Console
已有云端或 Serverless 集群可以直接跳到第 2 步。
-
操作界面
以下所有请求均可在 Kibana → DevTools → Console 里粘贴执行。
Console 还能一键转换成 cURL / Python / Go 等代码片段,方便集成。
2 · 创建索引 books
PUT /books
- 返回
{"acknowledged": true, "shards_acknowledged": true, …}
表示创建成功。 - 若索引不存在也可在插入文档时自动创建,不过手动显式建索引能提前配置分片、副本及映射。
3 · 写入文档
3.1 单条写入
POST /books/_doc
{"name": "Snow Crash","author": "Neal Stephenson","release_date": "1992-06-01","page_count": 470
}
- ES 会自动生成
_id
并立刻可搜索(近实时,默认 1 s 刷新)。
3.2 批量写入(Bulk)
POST /_bulk
{ "index": { "_index": "books" } }
{"name":"1984","author":"George Orwell","release_date":"1949-06-08","page_count":328}
{ "index": { "_index": "books" } }
{"name":"Brave New World","author":"Aldous Huxley","release_date":"1932-06-01","page_count":268}
…
- NDJSON:一行动作元数据 + 一行文档,配对出现。
- 批量导入效率远高于逐条
POST
,生产环境建议控制在 5 MB / 5000 条左右一批。
4 · 映射(Mapping)入门
4.1 动态映射(Dynamic)
默认情况下,ES 会 自动推断字段类型 并写入 mapping。
下面插入一个带新字段 language
的文档:
POST /books/_doc
{"name": "The Great Gatsby","author": "F. Scott Fitzgerald","release_date": "1925-04-10","page_count": 180,"language": "EN"
}
查看 mapping:
GET /books/_mapping
可见 language
已被标记为 text
类型。
优点:零配置、快速迭代
缺点:类型不可控,易出现 keyword/text 混用、日期被识别成 text 等问题
4.2 显式映射(Explicit)
PUT /my-explicit-mappings-books
{"mappings": {"dynamic": false, # 禁用自动识别"properties": {"name": { "type": "text" },"author": { "type": "text" },"release_date": { "type": "date", "format": "yyyy-MM-dd" },"page_count": { "type": "integer" }}}
}
- 未声明字段仍会存进
_source
,但无法搜索/聚合。 - 若想同时兼顾灵活性,可保留
dynamic: true
,只对关键字段做显式类型声明,形成 混合策略。
5 · 第一次搜索
5.1 全量查询
GET /books/_search
默认返回前 10 条文档,含 _score
、_source
等元信息。
5.2 match 全文检索
GET /books/_search
{"query": {"match": {"name": "brave"}}
}
match
会自动分词,Brave New World
、Brave-something
均可命中。- 若需精确匹配未分词文本可改用
term
或将字段映射为keyword
。
6 · 可选:删除索引重来
DELETE /books
DELETE /my-explicit-mappings-books
⚠ 不可恢复:文档、分片、映射将永久丢失,谨慎操作。
小结 & 下一步
已掌握 | 推荐深入 |
---|---|
✅ 创建/删除 Index | 分片、副本、ILM 生命周期 |
✅ 单条 & Bulk 写入 | Ingest Pipeline、动态模板 |
✅ 动态 vs 显式映射 | 多字段(fields )/ keyword + text 组合 |
✅ 基础搜索 | 复合查询(bool )、分页、高亮、聚合 |
当你能熟练写出 Bulk + 显式映射的索引脚本、并用
match
/bool
检索到想要的书籍,就已经完成从 数据写入 到 实时检索 的最小闭环。
接下来可以挑战 向量搜索、ES|QL、监控告警 等更高阶能力,打造真正生产级的搜索服务 🚀