在Kibana中,我注意到在我刷新索引模式后,我的一个字段显示为conflicted。
conflicted
范例:
我知道这是因为ElasticSearch在该字段中发现了不同类型的值,我该如何确定?这导致我的可视化中断,因为它们无法处理冲突字段。我该如何针对现有数据解决此问题?
uyto3xhc1#
经过几个小时的摆弄和翻阅弹性文档,我终于找到了我问题的答案。在ElasticSearch5.1(我使用的版本)中,您可以重新索引那些“有问题”的特定索引。在Kibana中点击Management〉Index Patterns,找到显示为conflicted的字段,然后点击相应的铅笔图标,查看字段的详细信息。在中,将显示不同字段类型下的索引。我在Power-Shell中编写了一个脚本,它通过指定“有问题的索引”来自动执行此操作,然后它执行以下操作(假设您的有问题的索引名为:log-20170101):
Management
Index Patterns
log-20170101
log-20170101-1
现在,当您在Kibana中刷新索引模式时,您会注意到字段不再是conflicted。您可以阅读以下内容:Mappings和Re-Indexing的函数请确保在下面指定新Map时,使用要查找的适当Map数据类型。您可以通过使用以下命令查询Elastic API来获取现有Map:
GET /_mapping/<your mapping name>
这是我在Power-Shell中编写的一个框架(示例)脚本,它非常基本,但我认为它可以提供帮助。
$index_list = @( "log-20170101" ) $index_list | % { $index_name = $_ $mapping_body = " { ""mappings"": { ""logevent"": { ""properties"": { ""@timestamp"": { ""type"": ""date"" }, ""correlationId"": { ""type"": ""text"", ""fields"": { ""keyword"": { ""type"": ""keyword"", ""ignore_above"": 256 } } }, ""duration"": { ""properties"": { ""TotalMilliseconds"": { ""type"": ""float"" } } } } } } }" $reindex_body = "{ ""source"": { ""index"": ""$index_name"" }, ""dest"": { ""index"": ""$index_name-1"" } }" $reindex_body_reverse = "{ ""source"": { ""index"": ""$index_name-1"" }, ""dest"": { ""index"": ""$index_name"" } }" Invoke-WebRequest -Uri http://elasticserver:9200/$index_name-1 -Method Put -Body $mapping_body Invoke-WebRequest -Uri http://elasticserver:9200/_reindex -Method Post -Body $reindex_body Invoke-WebRequest -Uri http://elasticserver:9200/$index_name -Method Delete Invoke-WebRequest -Uri http://elasticserver:9200/$index_name -Method Put -Body $mapping_body Invoke-WebRequest -Uri http://elasticserver:9200/_reindex -Method Post -Body $reindex_body_reverse Invoke-WebRequest -Uri http://elasticserver:9200/$index_name-1 -Method Delete }
编辑
请参阅此post,了解如何设置默认Map,以尝试防止此问题再次发生。
wribegjk2#
进入菜单,堆栈管理-〉索引模式,选择索引,过滤搜索冲突的字段名称,如下图所示(参考图片),点击警告,查看哪个索引出错。进入索引管理,找到索引如果你不担心数据,删除索引,如下图所示,否则你必须使用ElasticSearchAPI重新Map和重新索引错误的数据类型
2条答案
按热度按时间uyto3xhc1#
经过几个小时的摆弄和翻阅弹性文档,我终于找到了我问题的答案。
在ElasticSearch5.1(我使用的版本)中,您可以重新索引那些“有问题”的特定索引。
在Kibana中点击
Management
〉Index Patterns
,找到显示为conflicted
的字段,然后点击相应的铅笔图标,查看字段的详细信息。在中,将显示不同字段类型下的索引。我在Power-Shell中编写了一个脚本,它通过指定“有问题的索引”来自动执行此操作,然后它执行以下操作(假设您的有问题的索引名为:
log-20170101
):log-20170101-1
创建Maplog-20170101
重新索引为log-20170101-1
log-20170101
log-20170101
创建Maplog-20170101-1
重新索引为log-20170101
log-20170101-1
现在,当您在Kibana中刷新索引模式时,您会注意到字段不再是
conflicted
。您可以阅读以下内容:Mappings和Re-Indexing的函数
请确保在下面指定新Map时,使用要查找的适当Map数据类型。
您可以通过使用以下命令查询Elastic API来获取现有Map:
这是我在Power-Shell中编写的一个框架(示例)脚本,它非常基本,但我认为它可以提供帮助。
编辑
请参阅此post,了解如何设置默认Map,以尝试防止此问题再次发生。
wribegjk2#
进入菜单,堆栈管理-〉索引模式,选择索引,过滤搜索冲突的字段名称,如下图所示(参考图片),点击警告,查看哪个索引出错。进入索引管理,找到索引如果你不担心数据,删除索引,如下图所示,否则你必须使用ElasticSearchAPI重新Map和重新索引错误的数据类型