如何在不删除其elasticsearch数据的情况下删除索引的默认映射

How to remove default mapping of index without deleting its data of elasticsearch

我在 Couch-base 中有一些文档,其中一些字段值包含 space ("Ex. "New York")。 我无法使用术语查询将其搜索为完全匹配。 我发现要搜索具有 space 的字段值需要一些映射,例如 - index : not_analysed

我也做了同样的事情

但是当我从 couch base 到 elastic search 进行 XDCR 时。Couch base 本身创建了默认值 mapping.Because,我没有得到正确的结果。

那么,有什么方法可以删除默认映射而不删除其数据?

从技术上讲,您可以更改映射(查看映射 API),但实际上我发现它或多或少是不可能的,因为与现有映射存在冲突。

所以:

1) 在索引任何数据之前创建映射 2) 应用此博客 post 中的一些想法:https://www.elastic.co/blog/changing-mapping-with-zero-downtime

我有解决办法 在这里,我使用动态模板创建并映射了索引,然后执行了 XDCR。现在所有字符串字段都将 not_analysed.It 为我工作。

IIndicesOperationResponse result = null;
                    if (!objElasticClient.IndexExists(elastic_indexname).Exists)
                    {
                        result = objElasticClient.CreateIndex(elastic_indexname, c => c.AddMapping<dynamic>(m => m.Type("_default_").DynamicTemplates(t => t
                                                    .Add(f => f.Name("string_fields").Match("*").MatchMappingType("string").Mapping(ma => ma
                                                        .String(s => s.Index(FieldIndexOption.NotAnalyzed)))))));
                }

谢谢

Mukesh Raghuwanshi

请参考以下代码。 我已经使用动态模板创建并映射了索引,然后执行了 XDCR。 现在所有字符串字段都将是 not_analysed.

 IIndicesOperationResponse result = null;
                    if (!objElasticClient.IndexExists(elastic_indexname).Exists)
                    {
                        result = objElasticClient.CreateIndex(elastic_indexname, c => c.AddMapping<dynamic>(m => m.Type("_default_").DynamicTemplates(t => t
                                                    .Add(f => f.Name("string_fields").Match("*").MatchMappingType("string").Mapping(ma => ma
                                                        .String(s => s.Index(FieldIndexOption.NotAnalyzed)))))));
            }