【问题标题】:Elasticsearch: How do you delete a mapping type without deleting an entire index?Elasticsearch:如何在不删除整个索引的情况下删除映射类型?
【发布时间】:2016-05-22 21:45:54
【问题描述】:

是否可以从索引中删除单个映射类型而不删除整个索引? https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-delete-mapping.html 说这不再可能,但我觉得这很难相信。谁能解释为什么该功能被删除?似乎是基本的东西。

我有一个包含两个映射的索引。我希望能够在不删除另一种映射类型的情况下删除一种映射类型(以及该类型的所有文档)。

谢谢

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    删除类型/映射的潜在问题示例和禁用说明可在elasticsearch issue : 8877 中找到。 从问题描述中提取:

    目前,用户可以完全删除一个类型,即删除该类型, 该类型的所有文档,并删除相关的字段。 不幸的是,如果该类型的任何文件已经 索引,则字段是索引的一部分。添加字段 同名但不同的数据类型会在以后引起冲突。

    目前重新索引是唯一的选择,但是为了缓解客户端重新索引的问题,似乎将来可能会支持重新索引 api: 请参阅issue:16207issue:#15201 了解更多详情。

    【讨论】:

      【解决方案2】:

      为了回答您的问题,我相信当映射在集群中发布时,它是为了可靠性和性能优化而被淘汰的。

      ES索引之所以难改,是因为底层存储是倒排索引,你放入的任何数据都已经被那些映射规则索引了。

      Elasticsearch 降低了进入搜索的门槛,但隐藏了一些相当复杂的东西。

      【讨论】:

        【解决方案3】:

        对于 ES 的最新版本(2.0 以上),不再可以删除类型的映射。相反,您应该删除索引并使用新映射重新创建它。有关更多信息,您可以在official document here 中查看。 对于弹性搜索的旧版本(2.0 以下),允许删除映射(类型)及其数据。 REST 端点是

        [DELETE] /{index}/{type}
        
        [DELETE] /{index}/{type}/_mapping
        
        [DELETE] /{index}/_mapping/{type}
        

        【讨论】:

          【解决方案4】:

          我知道这很糟糕

          但这就是我们有别名的原因

          在查询时我们使用它们

          在建立索引时,您可以创建一个 index_2,放置新的映射,使用一些批处理方法完全填充它

          然后将别名从 index_1 更改为 index_2

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2022-01-23
            • 1970-01-01
            • 1970-01-01
            • 2018-12-30
            • 2018-11-25
            • 2019-06-05
            • 2021-11-21
            相关资源
            最近更新 更多