1

我的问题是关于使用 elasticsearch ruby​​ 客户端耐嚼更改我的弹性搜索索引中的字段类型。

我正在尝试更新索引中的字段类型。我收到此错误: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)来使用新字段类型重新索引我的索引?

谢谢。

4

2 回答 2

1

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

于 2018-10-24T14:01:17.237 回答
0

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

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

于 2018-10-25T16:40:57.410 回答