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

相关推荐
互联网志2 小时前
加速高校科技成果转化 赋能实体经济高质量发展
大数据·人工智能·物联网
李可以量化3 小时前
DeepSeek 量化交易实战:用标准化提示词模板实现 AI 辅助交易决策
大数据·数据库·人工智能
学掌门3 小时前
数据分析师职业规划——数据分析师的职业焦虑与未来发展
大数据·信息可视化
亚马逊云开发者3 小时前
EMR Core 节点部署 Flink Client 实战:Bootstrap Action 一次打包多次复用,解决调度系统提交任务的痛点
大数据·flink·bootstrap
sakiko_3 小时前
UIKit学习笔记2-组件嵌套、滚动视图等
笔记·学习·objective-c·swift·uikit
盘古信息IMS3 小时前
九宸纳百川,数智启新程|盘古信息与合肥昊邦科技合资成立合肥九宸智能,共筑智造新生态
大数据·人工智能
Irene19914 小时前
大数据开发语境下,SQL 模式名,映射关系 - - 概念理解
大数据·数据库·sql
小熊美家熊猫系统4 小时前
社区家政与平台家政:两种创业模式的深度对比分析
大数据·家政行业·社区家政·平台家政·家政管理软件
互联网志4 小时前
打通转化通道 赋能产业发展——高校科技成果转化的现状与破局
大数据·人工智能·物联网
绿虫光伏运维4 小时前
一文理清光伏运维的内容、常见问题与重要措施
大数据·运维·光伏业务