当前位置: 首页 > news >正文

Elasticsearch 基础速成 5 步跑通索引、文档、映射与查询

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 WorldBrave-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、监控告警 等更高阶能力,打造真正生产级的搜索服务 🚀

http://www.dtcms.com/a/305509.html

相关文章:

  • 【php 安装 xdebug】
  • 数学建模——最大最小化模型
  • 关于mysql时间类型和java model的日期类型映射
  • anaconda和Miniconda安装包32位64位皆可,anaconda和Miniconda有什么区别?
  • 【33】C# WinForm入门到精通 ——表格布局器TableLayoutPanel【属性、方法、事件、实例、源码】
  • JetBrains Annotations:从入门到落地,彻底告别 NullPointerException
  • Vue路由钩子完全指南
  • Linux ARM 平台 C 语言操作 Excel 文件的常用库与工具汇总(支持 xls 和 xlsx)
  • 【 建模分析回顾】[MultiOutputClassifier]MAP - Charting Student Math Misunderstandings
  • 【硬件-笔试面试题】硬件/电子工程师,笔试面试题-51,(知识点:stm32,GPIO基础知识)
  • Java stream 并发问题
  • 2025年6月电子学会青少年软件编程(C语言)等级考试试卷(二级)
  • 潇洒郎: Kafka Ubuntu 安装部署,命令行或者python生产数据与消费数据(kafka-python)
  • makefile中include *.d文件的作用
  • 安全和AI方向的学习路线
  • aws(学习笔记第五十课) ECS集中练习(2)
  • 项目目标如何拆解,才能提高执行效率和效果
  • 获取TensorRT引擎文件(.engine)版本号的几种方法
  • GitPython02-Git使用方式
  • 【Datawhale AI夏令营】科大讯飞AI大赛(大模型技术)/夏令营:让AI理解列车排期表(Task3)
  • Elasticsearch 全文检索与过滤
  • MyBatis Plus Wrapper 详细分析与原理
  • 设计模式十四:适配器模式(Adapter Pattern)
  • MCP提示词工程:上下文注入的艺术与科学
  • 【计算机视觉与代码大模型全景解析:从理论基础到学习路线】
  • VSCode高效集成开发全流程优化
  • [论文阅读] 人工智能 + 软件工程 | 增强RESTful API测试:针对MongoDB的搜索式模糊测试新方法
  • Jaeger理论、实战、问题记录
  • Python 中使用 OpenCV 库来捕获摄像头视频流并在窗口中显示
  • RAG实战指南 Day 28:RAG系统缓存与性能优化