如何使用 Chewy 更新 Elasticsearch 字段类型

How to update Elasticsearch field type with Chewy

我的问题是关于使用 elasticsearch ruby 客户端 chewy.

更改我的 elasticsearch 索引中的字段类型

我正在尝试更新索引中的字段类型。我收到此错误:illegal_argument_exception.

我了解到无法更改现有索引中的类型,因此我正在考虑重新索引所有内容:rake chewy:reset。我已经尝试了很多东西...我的重新索引无法正常工作。

详细错误:

Elasticsearch::Transport::Transport::Errors::BadRequest: [400] {"error":{"root_cause":[{"type":"illegal_argument_exception","reason":"mapper [enabled] cannot be changed from type [text] to [boolean]"}],"type":"illegal_argument_exception","reason":"mapper [enabled] cannot be changed from type [text] to [boolean]"},"status":400}

我以前的索引(默认启用的字段是文本):

class SearchIndex < Chewy::Index
  define_type Company, delete_if: :deleted_at do
    ...
    field :enabled
    ...
  end
end

我想要的索引:

class SearchIndex < Chewy::Index
  define_type Company, delete_if: :deleted_at do
    ...
    field :enabled, type: 'boolean'
    ...
  end
end

我如何使用 Chewy(如果可能,不通过 curl 请求 ElasticSearch)来使用新的字段类型重新索引我的索引?

谢谢。

我以前没有使用过 Chewy,但查看文档您应该能够在 ruby 控制台中调用 SearchIndex.reset!。当然,删除和重新创建索引是可能的,应该使用新数据类型从头开始重新创建。

我发现了为什么 Elsaticsearch 不希望我更改类型。这是因为我的索引有一些其他类型包含相同的字段(至少相同的字段名称),但具有另一种字段类型。

因此,所有同名的字段必须具有相同的类型。然后您将能够(并且您将不得不)删除您的索引并重新创建它。 (SearchIndex::purge! 完成工作)