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

时间:2018-10-24 12:11:15

标签: ruby elasticsearch chewy-gem

我的问题是关于使用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}

与以前一样,我的索引(默认情况下,启用字段为texte)

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)来使我的索引使用新的字段类型重新索引?

谢谢。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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