一杯咖啡的时间,聊聊技术与成长
查询入门:match、term、filter 与 bool
搜索词该分词吗?状态筛选为什么不该算分?四个动词分工表:match 管全文、term 管精确、match_phrase 管短语、bool 管组合,query 与 filter 两种上下文算不算分是分水岭。对 text 用 term 是新手第一坑。
近实时:为什么搜不到刚写进去的文档
文档写入成功,搜索却是零结果,一秒后又凭空出现——这不是 bug,是 ES 的近实时设计。内存 buffer、一秒 refresh、translog 兜底、段不可变与合并,写入链路一次拆到底。
mapping:字段类型建错,神仙也救不回来
价格建成 text,排序按字典序把 10 排在 9 前面,聚合直接报错。text 与 keyword 的分工、动态 mapping 的自作主张、object 数组的错配陷阱、类型改不了的补救路线——mapping 是地基,地基错了整栋楼返工。
分词器:中文搜索的第一道坎
默认的 standard 分词器把「燕麦拿铁」剁成四个单字,召回全靠缘分。装上 IK,分清 ik_max_word 与 ik_smart 两把刀,用对「细进粗出」,配好远程词典热更新——中文搜索及格线一次划清。
核心概念:Index、Document、Shard 与 Replica
从 MySQL 的世界观平移进 ES:表变索引,行变文档。但 shard 是新物种——建索引时定死的主分片数决定了路由公式,也决定了后期改起来的成本。概念地图一次画清。
倒排索引:正排查我,倒排查谁
手工倒排表只是玩具。真实的引擎长这样:三段式分词器、FST 词典、压缩倒排表加跳表,再配上管排序聚合的 doc values。拆开看每块零件,搜索为什么快就有答案了。
LIKE 查不了「燕麦拿铁」:为什么需要 Elasticsearch
用户搜「燕麦拿铁」,搜索框返回 0 结果,商品明明躺在库里。LIKE 前缀通配符走不了索引、不懂分词、性能随数据量线性劣化——这一篇把倒排索引请出场。
Docker Compose 本地开发环境搭建模板(附 yaml)
MySQL + Redis + Nacos + MinIO 一键起。包含健康检查、数据卷、网络隔离的完整配置,pig 项目直接用。
收官复盘:一张消息队列作战地图
20 篇走完,把消息队列的全部内容收进一张地图:症状到篇目的排查索引、按场景的阅读路径、三条心法与上线检查清单。收官不散场,地图常翻常新。