首页 > 解决方案 > Elasticsearch 重新索引然后无法添加映射

问题描述

您好 Elasticsearch 专家!想知道是否有人可以帮助解决正在发生的一件奇怪的事情:我们有一个索引,其中映射的数量已经变得庞大(超过 3000 个),我们希望通过重新索引来减少这种情况。在新索引中,我们将关闭动态映射,只添加我们想要用于搜索的映射。所以,我创建了一个新索引:

PUT /newindex-2021.01/_mapping
{
  "dynamic": "false",
  "date_detection": true,
  "properties": {
    "timestamp": {
      "type": "date"
    }
  }
}

然后我重新索引:

POST _reindex?wait_for_completion=false
{
  "source": {
    "index": "oldindex-2021.01"
  },
  "dest": {
    "index": "newindex-2021.01"
  }
}

然后我想为事件字段添加一个映射来测试一切是否正常,所以我运行了:

PUT /*newindex*/_mapping
{
  "properties": {
    "event": {
      "type": "text"
    }
  }
}

为了安全起见,我也跑了(不确定这是否有任何影响):

PUT /newindex-2021.0/_mapping
{
  "properties": {
    "event": {
      "type": "text"
    }
  }
}

当我导航到发现页面时,它现在显示事件字段的放大镜(表明我可以只搜索事件,因为已创建映射)。但是,当我单击它时,没有结果显示(好像没有文档具有字段事件 == 值,尽管它确实存在) 有什么我遗漏的吗?我只是想将映射添加到空索引.. 感谢您的帮助!

标签: elasticsearchkibanaelasticsearch-7kibana-7

解决方案


您无法更改已编入索引的文档的映射(事实上,这正是您正确地重新索引原始索引的原因)。您在重新索引后所做的是将新映射添加到没有任何字段的字段,使其从现在开始可查询 - 即,仅适用于新文档,而不是追溯现有文档。

您需要使用已包含您正在查找的字段映射的映射重新索引索引。


推荐阅读