一杯咖啡的时间,聊聊技术与成长
搜索产品化:从搜索框到搜索系统
零件全齐:分词、mapping、查询、评分、聚合、同步。组装成产品要一条流水线:预处理、召回、过滤、排序、展示五段式,加上搜索日志的反馈闭环与运营干预位——搜索系统不是查询语句,是产品。
数据同步:MySQL 到 ES 的四条路
同步双写怕失败、定时扫表嫌延迟、binlog 订阅要运维——MySQL 到 ES 的四条路各有各的价。按延迟容忍度和团队能力选型,用业务主键 upsert 保证幂等,全量加增量的组合拳才是常态。
分片规划:建索引时定死的那道数学题
随手 5 个分片,一年后被一堆小分片吃光内存;随手 1 个分片,数据涨了想拆拆不动。单分片 10 到 50GB 黄金区间、未来一年的扩容预留、rollover 滚动索引——分片数在建索引那一刻定生死。
集群:节点角色、主选举与脑裂防线
一台节点重启,集群差点散伙?节点分角色:master 管家、data 干活、协调节点接待;主选举靠多数派投票,奇数节点是底线,脑裂被 quorum 设计摁死。三色灯背后的集群自检逻辑一次说清。
写入调优:让导入快五倍的三件套
500 万条商品同步跑了四小时还腰斩不了。bulk 摊薄开销、导入期副本归零、refresh 暂停——写入三角一调整,五倍提速不是玄学;translog async 与业务 id 的取舍,调优清单一次列全。
聚合:把搜索页变成数据分析页
运营要报表:各品牌商品数、价格段分布、销量趋势。terms 分桶、avg 嵌套指标、range 切区间、date_histogram 看趋势——聚合走 doc values 正排,查询归查询,统计归统计,别拿 text 做聚合。
深分页:翻到第 100 页的代价
from 加 size 翻到一万条直接报错,这不是 bug 是保护。分布式归并让深翻页成本随页码线性放大——search_after 用游标续页、scroll 拍快照导数、PIT 保证视图一致,三把钥匙开三把锁。
进阶查询:高亮、纠错与多字段搜索
搜索页体验三件套:关键词不高亮像白搜、打错一个字零结果很劝退、只搜标题漏掉详情。highlight 管高亮、multi_match 管多字段加权、suggest 管纠错补全——把 did you mean 做成产品能力的完整路子。
评分:_score 到底怎么算出来的
月销一万的「燕麦拿铁」排在月销三百的「燕麦酥」后面,运营怒了。拆开 BM25 三个因素看懂 _score,用 explain 亲眼看打分过程,再用 function_score 把销量加权进排序——相关性引擎让位给业务规则。