Kibana 提示 "Unindexed fields cannot be searched" 怎么办?
Kibana 报字段未索引无法搜索,说明该字段在 Elasticsearch 中没被建立索引。检查 mapping、刷新索引模式、必要时重建索引。本文给出排查步骤。
原因:你搜索/过滤的字段在 Elasticsearch 的 mapping 中没有被索引(index: false 或字段类型不可搜索),或 Kibana 的索引模式(Data View)缓存过期。按下面步骤排查修复。
排查步骤
1. 查看索引 mapping
curl localhost:9200/your-index/_mapping
找到目标字段,确认它的类型:
text/keyword:可搜索(text 全文、keyword 精确);"index": false:不索引,不能搜索;enabled: false的对象:完全不索引。
2. 刷新 Kibana 索引模式
Kibana 缓存了字段列表。新字段写入后需要刷新:
Stack Management → Data Views → 选中索引模式 → 点刷新按钮。
3. 确认字段确实写入了
curl "localhost:9200/your-index/_search?q=*" | head -50
看文档里有没有这个字段。如果是 Logstash 管道问题导致字段没生成,搜索自然为空。
修复方式
情况 A:字段被映射成 index: false
mapping 不能原地改,需要新建索引(正确 mapping)→ reindex → 切换。
情况 B:text 字段想做精确匹配/聚合
text 类型不能直接聚合,需要用它的 .keyword 子字段:field.keyword。
情况 C:新字段没被索引模式识别
刷新 Data View 即可(第 2 步)。
观测云对照
观测云日志平台不存在 mapping 维护问题——所有上报字段自动可检索,无需预建索引;Pipeline 中可以控制字段类型和提取逻辑。
常见问题(FAQ)
Q:为什么 ES 会建出 index: false 的字段?
A:通常是有意配置(大字段不想被索引),或字段在 enabled: false 的对象内,或动态模板规则把它排除了。
Q:Kibana Discover 里能看到字段但搜不到?
A:能看到是因为字段在 _source 里存储着;搜不到是因为没进索引。存储和索引是两回事。
Q:mapping 里 keyword 有 ignore_above 会影响吗?
A:会。ignore_above: 256 的 keyword 字段,超过 256 字符的值不被索引,搜长值时搜不到。