升级Elastic& NEST从1.6.2搜索到2.3.3。
我们使用了能够在PutMappingDescriptor
和ElasticClient.CreateIndex()
之间共享相同的ElasticClient.Map()
。
但在2.3.3中,CreateIndex
需要TypeMappingDescriptor
和Map
需要PutMappingDescriptor
。
我们如何共享相同的映射配置?
答案 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());