在NEST 2.3.3中共享索引映射配置?

时间:2016-06-29 01:30:00

标签: elasticsearch nest elasticsearch-net

升级Elastic& NEST从1.6.2搜索到2.3.3。

我们使用了能够在PutMappingDescriptorElasticClient.CreateIndex()之间共享相同的ElasticClient.Map()

但在2.3.3中,CreateIndex需要TypeMappingDescriptorMap需要PutMappingDescriptor

我们如何共享相同的映射配置?

1 个答案:

答案 0 :(得分:0)

官方Nest开发人员在他们的github linked here中回答了这个问题。

基本上,您不直接使用Func<PutMappingDescriptor<Project>, IPutMappingRequest>而是使用PutMappingDescriptor<Project>。通过新建PutMappingDescriptor<Project>并从那里建立您的流畅映射。

创建索引期望ITypeMapping,而更新索引期望IPutMappingRequest实现ITypeMapping。因此,您可以使用PutMappingDescriptor

来满足这两个要求

要创建索引,请使用:

``` client.CreateIndex(“projects”,c =&gt; c     .Mappings(ms =&gt; ms         .Map(m =&gt; GetMapping())     ) );

``` 你忽略在lambda中传入的m并使用你创建的那个。你可以在NEST的source code中找到你可以做到这一点的原因,它会创建一个空的TypeMappingDescriptor供你进一步构建:

public MappingsDescriptor Map<T>(Func<TypeMappingDescriptor<T>, ITypeMapping> selector) where T : class => Assign(typeof (T), selector?.Invoke(new TypeMappingDescriptor<T>()));

要更新映射,请执行以下操作:

client.Map(GetMapping());