Elasticsearch 重新索引然后无法添加映射

Elasticsearch reindex then cant add mapping

嗨,Elasticsearch 专家!想知道是否有人可以帮助解决正在发生的 st运行ge 事情: 我们有一个索引,其中的映射数量已经变得非常庞大(超过 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"
    }
  }
}

当我导航到发现页面时,它现在显示事件字段的放大镜(表示我可以在创建映射时仅搜索事件)。但是,当我单击它时,没有显示任何结果(就好像没有文档具有字段事件 == 尽管它肯定存在的值) 有什么我想念的吗?我只是想添加一个映射到一个空索引.. 感谢您的帮助!

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

您需要重新索引到一个映射已经包含您要查找的字段映射的索引。