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 传参数。

相关推荐
jiayong232 小时前
常用 Git 命令详解
大数据·git·elasticsearch
江瀚视野2 小时前
京东“618”正式启动,今年的618有何不同?
大数据
IT界的老黄牛2 小时前
Flink 重启变双开:一次部署引发的两个 CDC 任务并发消费
大数据·flink·jenkins
A15362552 小时前
自动化仓储物流管理系统有哪些?2026年深度测评与技术解析
大数据·人工智能·自动化
weixin_404679312 小时前
虚幻5 学习笔记
笔记·学习·ue5
二宝哥2 小时前
大数据之安装Hadoop3.1.4
大数据·hadoop
金融小师妹2 小时前
基于AI宏观因子识别系统的贵金属波动分析:美元回落提振黄金反弹,能源飙升压制上行空间的机制分析
大数据·深度学习·逻辑回归·线性回归
在坚持一下我可没意见2 小时前
Python 修仙修炼录 08:字典秘境,参悟键值玄机
开发语言·笔记·python·入门·字典
凌波粒2 小时前
深度学习入门(鱼书)第1章笔记——Python 基础
笔记·python·深度学习
城事漫游Molly2 小时前
方差分析(ANOVA)入门——比较三组或更多组均值的利器
大数据·算法·均值算法·论文笔记·科研统计