如何查找有映射冲突的字段

How to find fields with mapping conflicts

我在 Kibana 中的索引设置告诉我,我的 logstash-* 索引模式中有映射冲突的字段。

找出哪些字段具有冲突映射的最简单方法是什么and/or冲突发生在哪些索引中?

定义模式时,应该很容易在字段列表中发现它们。像这样:

因为在gui中找不到映射冲突。我沿着艰难的道路分析了我的 missing/conflicting 字段类型的配置,找到了违规者并重新索引了我的数据。

至少从 Kibana 5.2 开始,您可以在 Filter 字段中键入 "conflict",这将过滤所有字段,仅保留有冲突的字段。在最右边有一个名为 "controls" 的列,每个字段都有一个带有铅笔图标的按钮。单击它会告诉您哪些索引具有哪些映射。

字段仅筛选出有冲突的字段:

字段映射冲突的索引:

在Elasticsearch 5.5.2中,您可以点击Filter搜索框右侧的下拉菜单,然后select "conflict"。这在索引模式页面中。

您可以使用 Kibana 中的映射 API 轻松找到字段的映射方式。

如果您知道存在映射冲突,我假设您知道发生冲突的字段名称。这些将列在 Management/Index Patterns/index_pattern

如果您有每天创建的索引,例如 production-2020.06.16,您可以搜索包含 production* 的所有索引。

转到 Dev Tools 并输入此查询,更改索引模式 (production*) 和 conflictedFieldname 以满足您的需要。

GET production*/_mapping/field/conflictedFieldname

这将提取与生产* 模式匹配的所有索引,并将列出每个索引的 conflictedFieldname 的映射。滚动查看哪个与另一个不同。

您还可以在此处查看 Elasticsearch 文档:Elasticsearch documentation: Get Field Mapping API

发生冲突的原因是 Elasticsearch 使用进入索引的第一个值来最佳猜测它应该是什么数据类型。您可以通过为您关心的索引模式放置一个模板来确保它始终是相同的类型。

Elasticsearch documentation: Put Index Template

如果您单击显示警告的索引模式页面上的类型列,它应该按类型对索引进行排序。冲突字段的类型为 'conflict'.