升级到 elasticsearch 7 时重新索引错误

reindex error when upgrading to elasticsearch 7

我们目前正在使用 searchkick gem 并且效果很好。最近我尝试在我的本地开发环境中将 elasticsearch 升级到 7。我使用自制软件完成并 运行ning(在研究后我需要 运行 rm -fr /usr/local/var/lib/elasticsearch)。当我重新索引我的一个模型时,出现以下映射错误:

Elasticsearch::Transport::Transport::Errors::BadRequest: [400] {"error":{"root_cause":[{"type":"mapper_parsing_exception","reason":"Root mapping definition has unsupported parameters: [cosmetics/products : {properties={product={type=keyword}}}]"}],"type":"mapper_parsing_exception","reason":"Failed to parse mapping [_doc]: Root mapping definition has unsupported parameters: [cosmetics/products : {properties={product={type=keyword}}}]","caused_by":{"type":"mapper_parsing_exception","reason":"Root mapping definition has unsupported parameters: [cosmetics/products : {properties={product={type=keyword}}}]"}},"status":400}

使用elasticsearch 6.8.4时不会出现该错误。谁能给我指出解决此问题的资源?

版本 7 不支持映射类型。
要解决此问题,请删除所有映射类型(例如 _doc)

在 Elasticsearch 6.0.0 或更高版本中创建的索引只能包含一种映射类型。在 5.x 中创建的具有多种映射类型的索引将继续在 Elasticsearch 6.x 中像以前一样运行。 Elasticsearch 7.0.0 API 中的类型将被弃用,并在 8.0.0 中完全删除。

Check this out

And this

除了@Assael Azran 的出色回答和他分享的 link 之外,这里还有一些其他信息:

  1. 如果您在 5.x 或之前创建了索引,您需要在升级到 7.x
  2. 之前在 6.8 中重新索引它们
  3. 如果您有多种类型的索引,则每种文档类型需要 re-index them
  4. 您的案例中的 products 等自定义类型名称应替换为 _docdoc。理想情况下,定义映射时不应出现类型名称。参见 this
  5. 您的所有 5.x 或之前的快照(如果有)将不适用于 7.x。因此,当您使用 6.8 时,您需要从这些快照中恢复索引,然后重新索引索引,然后再次快照。然后您可以删除索引并删除旧快照。

  6. 看看这个升级link

希望对您有所帮助