Kibana 提示 "Unindexed fields cannot be searched" 怎么办?
Kibana 报字段无法搜索,需检查字段类型、index/doc_values、跨索引映射及 Data View 状态。检查 mapping、刷新索引模式、必要时重建索引。本文给出排查步骤。
原因:你搜索/过滤的字段在 Elasticsearch 的 mapping 中不可搜索(需结合 index、doc_values、字段类型及跨索引 mapping 判断),或 Kibana 的索引模式(Data View)缓存过期。按下面步骤排查修复。
排查步骤
1. 查看索引 mapping
curl localhost:9200/your-index/_mapping
找到目标字段,确认它的类型:
text/keyword:可搜索(text 全文、keyword 精确);"index": false:不建立倒排索引,但部分类型开启 doc_values 时仍可较慢地查询;enabled: false的对象:完全不索引。
2. 刷新 Kibana 索引模式
Kibana 缓存了字段列表。不同 Kibana 版本可能自动更新或提供刷新入口;先检查实际 Data View 覆盖的索引及 _field_caps 的类型冲突:
Stack Management → Data Views → 选中索引模式 → 点刷新按钮。
3. 确认字段确实写入了
curl "localhost:9200/your-index/_search?q=*" | head -50
看文档里有没有这个字段。如果是 Logstash 管道问题导致字段没生成,搜索自然为空。
修复方式
情况 A:字段被映射成 index: false
mapping 不能原地改,需要新建索引(正确 mapping)→ reindex → 切换。
情况 B:text 字段想做精确匹配/聚合
text 默认禁用 fielddata,排序/聚合通常使用实际存在的 keyword 子字段;.keyword 不保证存在,新增 multi-field 也不会自动为历史文档补值,需更新或重建数据。
情况 C:新字段没被索引模式识别
刷新 Data View 即可(第 2 步)。
常见问题(FAQ)
Q:为什么 ES 会建出 index: false 的字段?
A:通常是有意配置(大字段不想被索引),或字段在 enabled: false 的对象内,或动态模板规则把它排除了。
Q:Kibana Discover 里能看到字段但搜不到?
A:能看到是因为字段在 _source 里存储着;搜不到可能是字段能力、分词、ignore_above、映射冲突或查询方式问题,不能仅凭 _source 可见推断原因。存储和索引是两回事。
Q:mapping 里 keyword 有 ignore_above 会影响吗?
A:会。ignore_above: 256 的 keyword 字段,超过 256 字符的值不被索引,搜长值时搜不到。