ES 搜索引擎相关面试考察点¶
一、倒排索引¶
传统:文档 → 词。 倒排:词 → 文档列表。
查询"中国 北京",查两个词的倒排表,求交集。
二、ES 核心概念¶
| ES | MySQL |
|---|---|
| Index | Database |
| Type | Table(7.x 后废弃) |
| Document | Row |
| Field | Column |
| Mapping | Schema |
三、分词¶
- Standard:标准分词,按词。
- IK:中文分词,ik_max_word(最细粒度)、ik_smart(智能)。
- 索引时用 max,查询时用 smart。
四、DSL 查询¶
1. 全文查询¶
2. 精确查询¶
3. bool 组合¶
{
"query": {
"bool": {
"must": [ { "match": { "title": "ES" } } ],
"filter": [ { "term": { "status": "1" } } ],
"must_not": [ { "term": { "deleted": true } } ],
"should": [ { "term": { "hot": true } } ]
}
}
}
- must:必须满足,打分。
- filter:必须满足,不打分,可缓存。
- must_not:不满足。
- should:可选,至少满足一个(有 must 时可不满足)。
五、相关性打分¶
BM25 算法:TF(词频)× IDF(逆文档频率)× 字段长度归一化。
六、聚合¶
{
"aggs": {
"by_status": {
"terms": { "field": "status" },
"aggs": { "avg_amount": { "avg": { "field": "amount" } } }
}
}
}
七、ES vs MySQL¶
- MySQL 用 B+ 树,适合精确查询和事务。
- ES 用倒排索引,适合全文检索、复杂条件、聚合分析。
- 业务数据在 MySQL,ES 是从 MySQL 同步过来的副本。
八、ES 为什么慢 / 快¶
- 快:倒排索引、内存计算、分片并行。
- 慢:深分页、聚合大结果集、wildcard、内存不足。
高频追问
- ES 近实时:写入后默认 1s 才能搜到(refresh_interval)。
- 为什么不建议深分页?coordinate 节点要合并各分片数据。