Elasticsearch 分词与字段类型(keyword vs. text)面试题 🔍
目录
- 基础概念
- 底层存储
- 查询影响
- 多字段
- 聚合与排序
- 分词器
- 实战排查
- 总结
基础概念
💡 问题1:Elasticsearch 中的 keyword 和 text 类型有什么区别?
👉 查看参考答案
对比项 | keyword | text |
---|
分词(Analysis) | ❌ 不进行分词,存储原始字符串 | ✅ 存入时先分词(如标准分词器) |
搜索方式 | 🎯 只能精确匹配(如 term 查询) | 🔎 支持全文检索(如 match 查询) |
适用场景 | 📊 精确匹配、聚合、排序(如 status、ID) | 📝 全文搜索(如 article、description) |
是否支持 DocValues | ✅ 默认支持(适合排序/聚合) | ❌ 默认不支持(除非启用 fielddata) |
底层存储
🗄️ 问题2:keyword 和 text 类型在倒排索引中的存储方式有何不同?
👉 查看参考答案
keyword:
- 整个字符串作为**一个词项(term)**存入倒排索引
- 例如 “error” 会直接存储为
error
,搜索时必须完全匹配
text:
- 字符串会被分词器拆分成多个词项
- 例如 “Quick Fox” 可能被拆分为
["quick", "fox"]
,支持部分匹配
查询影响
🔍 问题3:以下查询会返回什么结果?为什么?
PUT /test_index
{"mappings": {"properties": {"title": { "type": "text"