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

相关推荐
日常筹谋记几秒前
自动化仓储安全防护工况评估:明治传感器AS-33C技术适配性分析
大数据·运维·创业创新·业界资讯
updayday8549 分钟前
离职域账号状态变更与Ping64操作记录核对
大数据·网络·数据库·安全·智能路由器
aramae12 分钟前
MySQL内置函数(7)
开发语言·笔记·后端·mysql·其他
baopixiaoz13 分钟前
BeeQuant × BeeAgent:用AI加速策略验证
大数据·人工智能·python·区块链
bessyon13 分钟前
信息透明度与决策效率:一个技术视角的分析
笔记
智商网输送线配件1 小时前
2026 自动化流水线配件采购难题破解:小批量混批与非标定制的供应链实测
大数据·人工智能·自动化·智商网·流水线设备配件
hanlin031 小时前
刷题笔记:力扣第41题-缺失的第一个正数
笔记·算法·leetcode
辛迪聊物业数字化1 小时前
智慧物业管理平台架构实践:从SaaS物业云到商管系统的全模块落地
大数据·微服务·php
SelectDB2 小时前
快手基于 Apache Doris 千亿多模态检索的实践
大数据·数据库·数据分析
SelectDB2 小时前
StarRocks 迁移至 Apache Doris 完整指南:三步完成结构、数据与业务平滑切换
大数据·数据库·数据分析