如何在不删除其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)))))));
}
我在 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)))))));
}