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

实战教程:Elasticsearch 数据索引与搜索全流程

实战教程:Elasticsearch 数据索引与搜索全流程

    • 一、前置说明:基础概念与环境
      • 1.1 核心概念
      • 1.2 环境要求
    • 二、操作流程总览:索引+搜索标准流程图
    • 三、索引操作:创建索引 + 插入数据(核心步骤)
      • 3.1 操作1:创建索引(相当于建库)
      • 3.2 操作2:单条数据索引(插入文档)
      • 3.3 操作3:批量数据索引(批量插入)
    • 四、搜索操作:ES 核心搜索语法(最全常用场景)
      • 4.1 操作1:查询所有文档(基础搜索)
      • 4.2 操作2:全文检索(关键词搜索,最常用)
      • 4.3 操作3:精确匹配(不分词)
      • 4.4 操作4:多条件组合搜索(bool查询)
      • 4.5 操作5:高亮搜索(关键词标红)
      • 4.6 操作6:分页 + 排序搜索
    • 五、数据修改与删除:索引维护操作
      • 5.1 修改数据(更新文档)
      • 5.2 删除数据
      • 5.3 删除索引
    • 六、索引+搜索完整执行流程(底层原理)
    • 七、高频搜索语法总结
    • 八、总结

🌺The Begin🌺点点关注,收藏不迷路🌺

一、前置说明:基础概念与环境

1.1 核心概念

  1. 索引(Index):相当于MySQL的数据库,用于归类数据
  2. 文档(Document):相当于MySQL的一行数据,以JSON格式存储
  3. 字段(Field):文档中的属性,相当于MySQL的列
  4. RESTful API:ES通过GET/PUT/POST/DELETE请求操作数据

1.2 环境要求

  • 已安装 Elasticsearch(本文使用7.x/8.x通用版本)
  • 可使用Postman/Kibana Dev Tools/Curl发送请求
  • 访问地址:http://localhost:9200

二、操作流程总览:索引+搜索标准流程图

创建索引

插入文档/索引数据

刷新索引

执行搜索查询

获取/解析结果


三、索引操作:创建索引 + 插入数据(核心步骤)

3.1 操作1:创建索引(相当于建库)

作用:提前定义索引名称、字段类型、分词规则(推荐手动创建)

请求方式:PUT
请求地址http://localhost:9200/user
请求体

{"settings":{"number_of_shards":1,// 主分片数量"number_of_replicas":0// 副本数量},"mappings":{"properties":{"name":{"type":"text"},// 全文检索字段"age":{"type":"integer"},"city":{"type":"keyword"},// 精确匹配字段"intro":{"type":"text","analyzer":"ik_max_word"}// 中文分词}}}

成功返回"acknowledged": true


3.2 操作2:单条数据索引(插入文档)

作用:向索引中添加JSON格式数据

请求方式:POST
请求地址http://localhost:9200/user/_doc/1(1为文档ID)
请求体

{"name":"张三","age":25,"city":"北京","intro":"我是一名后端开发工程师,擅长Java和Elasticsearch"}

成功返回"result": "created"


3.3 操作3:批量数据索引(批量插入)

作用:一次性插入多条数据,提升效率

请求方式:POST
请求地址http://localhost:9200/user/_bulk
请求体

{"index":{"_id":"2"}}{"name":"李四","age":28,"city":"上海","intro":"前端开发工程师,精通Vue和React"}{"index":{"_id":"3"}}{"name":"王五","age":23,"city":"北京","intro":"测试工程师,专注自动化测试"}

四、搜索操作:ES 核心搜索语法(最全常用场景)

4.1 操作1:查询所有文档(基础搜索)

请求方式:GET
请求地址http://localhost:9200/user/_search
请求体

{"query":{"match_all":{}}}

4.2 操作2:全文检索(关键词搜索,最常用)

作用:分词匹配,适合标题、简介、内容搜索
示例:搜索intro中包含工程师的文档

{"query":{"match":{"intro":"工程师"}}}

4.3 操作3:精确匹配(不分词)

作用:匹配完整值,适合城市、ID、状态等字段
示例:搜索city北京的用户

{"query":{"term":{"city":"北京"}}}

4.4 操作4:多条件组合搜索(bool查询)

逻辑

  • must:必须满足(AND)
  • should:满足其一(OR)
  • filter:过滤,不计算得分

示例:北京 + 年龄>25 + 包含开发

{"query":{"bool":{"must":[{"term":{"city":"北京"}},{"match":{"intro":"开发"}}],"filter":[{"range":{"age":{"gt":25}}}]}}}

4.5 操作5:高亮搜索(关键词标红)

作用:搜索结果中给关键词添加标签,前端直接展示高亮

{"query":{"match":{"intro":"工程师"}},"highlight":{"fields":{"intro":{}}}}

4.6 操作6:分页 + 排序搜索

适用场景:列表分页展示

{"query":{"match_all":{}},"sort":[{"age":"desc"}],"from":0,"size":2}

五、数据修改与删除:索引维护操作

5.1 修改数据(更新文档)

请求方式:POST

{"doc":{"age":26}}

5.2 删除数据

请求方式:DELETE
http://localhost:9200/user/_doc/1

5.3 删除索引

请求方式:DELETE
http://localhost:9200/user


六、索引+搜索完整执行流程(底层原理)

写入数据:索引文档

分词处理

生成倒排索引

存储到分片

搜索数据:输入关键词

分词解析

查询倒排索引

匹配文档ID

返回结果+排序高亮


七、高频搜索语法总结

搜索类型关键字适用场景
查询所有match_all列表展示
全文检索match中文搜索、模糊匹配
精确匹配term城市、状态、ID
范围查询range年龄、价格、时间
组合查询bool多条件筛选
高亮展示highlight搜索结果关键词标红
分页排序from/size/sort分页列表

八、总结

  1. 索引数据:先创建索引(定义结构)→ 单条/批量插入JSON文档
  2. 搜索数据:使用match/term/bool实现全文、精确、组合搜索
  3. 核心能力:分词检索、毫秒级响应、高亮、分页、聚合分析
  4. 最佳实践text用于全文搜索,keyword用于精确匹配


🌺The End🌺点点关注,收藏不迷路🌺
http://www.jsqmd.com/news/671205/

相关文章:

  • 深入NAND Flash:ONFI协议中的时序模式(Mode 0-5)到底怎么选?一篇讲清性能与兼容性
  • Docker Compose部署RabbitMQ踩坑实录:从‘Connection refused‘到成功访问管理后台的完整排错指南
  • 手把手教你离线部署 Verdaccio:让内网也能拥有自己的 npm 私仓
  • 全面修复:Windows更新重置工具的完整使用指南
  • 全面盘点:Elasticsearch 支持的所有数据查询搜索方式
  • 代码解释、调试与优化建议(使用千问)
  • 从模拟到实战:在eNSP中配置ACL限制特定网段访问(含时间范围策略)的保姆级教程
  • MASA全家桶汉化包终极指南:让Minecraft模组界面说中文
  • “Webinar Replay: Spring with Immutability” 指的是一场已录制回放的技术网络研讨会(Webinar)
  • Joy-Con Toolkit:让你的Switch手柄重获新生,告别漂移困扰
  • 实战精讲:如何在Elasticsearch中进行数据的聚合分析
  • 用智能指针实现的、线程安全的、可复用的 内存池
  • Windows电脑上直接运行安卓应用?APK安装器终极解决方案
  • 解密QQ音乐加密音频:qmc-decoder工具完全指南
  • EF Core 10向量搜索插件安装失败?92%开发者忽略的3个.NET SDK版本陷阱(.NET 8.0.400+强制要求,旧版将静默降级为L2距离)
  • 【Dify 2026文档解析权威白皮书】:首次公开3大底层解析引擎重构逻辑与实测性能跃升47%的工程细节
  • fre:ac音频转换器终极指南:免费、高效、跨平台的音频处理解决方案
  • Kotlin 协程 - 在Android中的使用
  • 浏览器Cookie本地导出终极指南:Get cookies.txt LOCALLY完全解析
  • 当缠论遇上自动化:我如何用开源插件让技术分析变得更直观
  • RunFilesBuilder 项目安装与配置指南
  • 题解:洛谷 AT_abc355_c [ABC355C] Bingo 2
  • Dify工作流引擎演进史(2024→2026核心跃迁图谱):从YAML硬编码到可视化DSL+动态条件路由的工程化革命
  • 多页pdf怎么拆分成单页?5种高效方法,新手不用求人
  • 手把手教你用STM32CubeMX和FreeModbus搭一个完整的Modbus RTU主从测试环境
  • 题解:AcWing 278 数字组合
  • 创新实训(二)——FastAPI后端登录注册功能实现及前后端连接
  • 3 shell脚本编程
  • C语言数组实战:避开‘暴力模拟’的坑,用标记法高效统计‘安全区域’
  • 5分钟掌握Inter字体:现代网页排版的终极OpenType特性指南