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"