Elasticsearch (ES) 核心笔记

1. 整体概念:ES vs MySQL
概念 MySQL Elasticsearch 理解
库/表 Database/Table Index (索引) 相当于一个大文件夹。
行 Row Document (文档) 相当于文件夹里的一张卡片(JSON格式)。
字段 Column Field 卡片上的具体信息。
  • 一个索引 包含 多个文档。
  • 一个文档 是 一个 JSON 对象。
  • 这个 JSON 对象里可以包含 多个字段 ,字段的值可以是字符串、数字,也可以是嵌套的子对象。
2. 核心特性
  • 一个索引只对应一种类型 :
    • 现状:ES 7.x+ 已移除 Type 概念。一个索引只能存一种结构的文档。
    • 原因 :底层 Lucene 引擎要求字段类型统一(比如 status 要么全是字符串,要么全是数字),避免冲突和性能浪费。
    • 实践 :人员档案存 profile_index,案件存 case_index,互不干扰。
  • 文档是 JSON :
    • 支持复杂结构,如数组 (group_ids: ["1", "2"]),这是 ES 处理多值数据的杀手锏。
3. 为什么使用 Script(脚本)?

在 Java 代码中拼接字符串执行脚本,是为了原子性更新。

  • 痛点 :如果先查出来 -> 改 -> 写回去,高并发下容易造成数据覆盖(丢数据)。
  • 方案:把"修改逻辑"发给 ES,让 ES 在服务端内存里直接改。
  • 好处 :线程安全 (不会丢数据)、性能高(数据不用在网络间传输)。
4. Script 脚本参数详解

在 new Script(type, lang, code, params) 中:

  1. type :脚本类型。
    • inline(默认):代码写在请求里(最常用)。
    • stored:代码预存于 ES,这里传 ID。
  2. lang :脚本语言。
    • painless(默认):ES 专用语言,安全高效。
  3. code :脚本代码(字符串)。
    • 真正的逻辑,如 ctx._source.age += 1。
  4. params :外部参数(Map)。
    • 用来把 Java 里的变量(如 groupId)传进脚本里,在脚本中通过 params.xxx 访问。
5. 脚本中的核心变量 ctx
  • ctx:固定写法,代表"上下文"。
  • ctx._source :最常用,代表当前文档的 JSON 数据 。
    • 读取 :ctx._source['name']
    • 修改 :ctx._source['group_id'] = 新值

终极总结

ES 是存 JSON 的,一个索引只存一种卡。为了改数据不丢,逻辑发给 ES 自己跑(Script),ctx 代表卡,params 传参数。

相关推荐
Easy_API5 小时前
2.8万亿参数,编程反超GPT-6 Astra:Kimi K3.1 Pro把开源模型推到了哪一步
大数据·人工智能·gpt·深度学习
GlobalInfo5 小时前
2026年机器人多指灵巧手市场分析报告——涵盖行业调查、趋势分析与发展前景
大数据·人工智能·microsoft·微服务·机器人
sbjdhjd5 小时前
网工进阶笔记:H3CSE 园区网全栈技术与协议汇总
网络·笔记·云计算·ssh·网络工程·vlan·aaa
微订校园外卖平台6 小时前
校园外卖平台选模板还是定制:架构、数据流与验收清单
大数据·架构·外卖系统·本地生活·微订
Eloudy8 小时前
Qwen2.5-14B-Instruct-AWQ 模型文件结构分析
大数据·elasticsearch·搜索引擎
海绵宝宝的月光宝盒9 小时前
14-AutoCAD-阵列命令应用与案例实战(AR)
经验分享·笔记·自动化·课程设计·制造·学习方法·cad
白山编程大哥10 小时前
接口幂等性是什么?如何设计?
笔记
ACP广源盛1392462567310 小时前
6 盘位存储扩展方案选型笔记:YLB3116 @ACP评估记录
笔记·硬件架构·硬件工程·国产芯片
小李不想当小白10 小时前
SPI通信外设与W25Q64 (硬件SPI)(STM32标准库学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习·嵌入式
重生之高冷汉堡包10 小时前
跨境电商运营团队如何安全交接店铺账号?多账号权限管理指南
大数据