Elasticsearch 查询与过滤(Query vs. Filter)面试题
Elasticsearch 查询与过滤(Query vs. Filter)面试题 🚀
目录
- 基础概念
- 性能优化
- 实战应用
- 错误排查
- 高级场景
- 设计题
- 总结
基础概念
🔍 面试题1:基础概念
题目:
请解释Elasticsearch中query
和filter
的主要区别,并说明何时应优先使用filter
。
核心区别:
特性 | query | filter |
---|---|---|
评分计算 | ✅ 计算相关性得分(_score ) | ❌ 不计算得分 |
结果缓存 | ❌ 不缓存 | ✅ 结果可缓存 |
适用场景 | 📝 全文搜索、需要排序 | 🎯 精确匹配、范围过滤 |
示例 | 搜索"性价比高的手机" | status=active |
优先使用filter的场景:
- 📋 精确值匹配(如
category=electronics
) - 📏 范围查询(如
price:[1000 TO 5000]
) - ✅ 布尔条件(如
tags IN ("促销", "新品")
)
性能优化
⚡ 面试题2:性能优化
题目:
为什么filter
比query
性能更高?Elasticsearch底层是如何优化filter
执行的?
性能优势原因:
-
无评分开销 🚫
filter
跳过相关性计算(_score
)- 减少CPU消耗
-
结果缓存 💾
filter
结果会被缓存(如bitset
缓存)- 重复查询直接命中缓存
底层优化机制:
-
Bitset缓存 🧩
- 首次执行
filter
后,匹配的文档ID集合会被缓存 - 后续查询直接复用
- 首次执行
-
跳过分段(Segment) ⏭️
- 对常驻内存的
filter
缓存 - Lucene无需重复遍历倒排索引
- 对常驻内存的
实战应用
🛠️ 面试题3:实战应用
题目:
以下是一个混合使用query
和filt