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、監控告警 等更高階能力,打造真正生產級的搜索服務 🚀