Kibana(OpenSearch)中哪些字段搜索异常,如何解决?

摘要:背景 最近在OpenSearch查看线上日志的时候,发现某个索引下有些字段无法直接在界面上筛选,搜索到也不高亮,非常的不方便,就像下面这样 字段左侧两个筛选按钮禁用了无法点击,提示 Unindexed fields can not be s
背景 最近在OpenSearch查看线上日志的时候,发现某个索引下有些字段无法直接在界面上筛选,搜索到也不高亮,非常的不方便,就像下面这样 字段左侧两个筛选按钮禁用了无法点击,提示 Unindexed fields can not be searched 右侧则有感叹号提示 No cached mapping for this field. Refresh field list from the Management > Index Patterns page 浅析 索引模式(Index Pattern)是用于定义OpenSearch中索引的元数据信息的。它包含了索引中包含的所有字段的名称、数据类型、分析器、存储方式等信息。当用户进行搜索或聚合操作时,Kibana需要根据字段映射信息来解析查询请求,以便正确地查询并返回结果。 "No cached mapping for this field"提示意味着无法找到字段映射信息,而"Unindexed fields can not be searched"则是由于没有正确的字段映射信息导致无法搜索未索引字段。这通常发生在索引模式被修改后,但是缓存还没有更新时,或者在新索引被创建但是还没有刷新字段列表时。 解决这个问题的方法是在Kibana的管理页面中刷新字段列表,以确保所有字段的映射信息都是最新的。在这个页面中,Kibana会缓存映射信息以提高性能,如果新加入了一个字段,则需要刷新字段列表才能使其可搜索。 解决 在OpenSeach里,从Stack Management进入 Index patterns页面,找到对应的索引模式,点击右上角刷新按钮 大部分情况刷新完问题就解决了,但是实际上也可能会引入新的问题,比如下面这样直接搜索报错: F12查看请求,可以看到opensearch返回了400 错误信息: Trying to retrieve too many docvalue_fields. Must be less than or equal to: [100] but was [215]. This limit can be set by changing the [index.max_docvalue_fields_search] index level setting 由于我们刷新了字段列表,导致搜索的字段超过了默认100的上限,最简单的方法是在【Dev Tools】里用下面REST API上调该索引模式的max_docvalue_fields_search PUT /your-index-*/_settings { "index" : { "max_docvalue_fields_search" : 300 } } 成功后会返回"acknowledged" : true。 这些做完之后,在OpenSearch上查看、筛选日志就一切正常了:) 参考 https://github.com/elastic/kibana/issues/22897