我的问题是关于使用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)来使我的索引使用新的字段类型重新索引?
谢谢。
答案 0 :(得分:1)
我以前没有使用过Chewy,但是查看文档,您应该只能够在ruby控制台中调用SearchIndex.reset!
。当然可以删除和重新创建索引,并且应该使用新的数据类型从头开始重新创建索引。
答案 1 :(得分:0)
我发现了为什么Elsaticsearch不想让我更改类型。这是因为我的索引得到了其他一些包含相同字段(至少具有相同字段名称)但具有其他字段类型的类型。
因此,所有具有相同名称的字段都必须具有相同的类型。然后,您将能够(并且必须)删除索引并重新创建它。 (SearchIndex::purge!
可以完成工作)