JJava 知识库
JAVA INTERVIEW

高频面试题

ES进阶约 2 分钟

你们项目里 Elasticsearch 用在什么场景?为什么没有直接用 MySQL 模糊查询?

参考回答约 2 分钟 · 口语表达
我的判断

我们用 ES 做多字段检索、相关性和组合筛选,MySQL 保留权威数据;不是所有模糊查询都值得引入搜索集群。

例如商品搜索要按中文名称召回,再按品牌、类目、价格筛选和相关性排序。ES 的倒排索引把词映射到文档,查询不必对每行做 %keyword%;列式 doc values 又适合筛选、聚合和排序。MySQL BTree 对前缀和精确查询很好,但前导模糊、分词和相关性不是它的强项。

数据链路会让 MySQL 做 source of truth,通过 outbox/binlog 事件异步更新 ES。搜索结果拿到商品 ID 后,关键价格和库存会回权威服务校验,接受搜索索引有秒级延迟。

我不会把订单点查或简单状态筛选也搬到 ES。一个正确联合索引能解决、数据量不大、又要求事务一致时,MySQL 更简单可靠。

引入 ES 后要承担 mapping、分片、重建索引、乱序消息和集群容量,因此收益必须来自真实搜索需求,而不是“SQL 慢”三个字。