如何在不写入弹性搜索索引的情况下在 Nest 中自动映射?

How to automap in Nest without writing to the elasticsearch index?

是否可以利用 NEST auto-mapping features 获取 Nest 属性 和 Type 对象,而无需通过 PUT Mapping 和 Create Index API 将它们实际写入弹性索引?

例如,我想自动映射此 CLR class 公司:

public class Company
{
    public string Name { get; set; }
}

并将弹性映射存储到如下变量中:

Nest.TypeMapping typeCo = null; // for the mapped Company type
Nest.IProperty propCoName = null;  // for the mapped Company Name property 

但不要将公司映射写入索引。

我可以写入临时索引作为解决方法,但我怀疑这不是必需的。

使用 elasticsearch 5.x 和 Nest 5。

根据您的具体需要,您可以采取几种不同的方法

使用PropertyWalker

var walker = new PropertyWalker(typeof(Company), null);   
var properties = walker.GetProperties();

将提供自动映射推断的 IProperty 类型。

使用TypeMappingDescriptor<T>

var descriptor = (ITypeMapping)new TypeMappingDescriptor<Company>()
    .AutoMap();

将在 .Properties 属性 中提供从自动映射推断出的 IProperty 类型,以及 ITypeMapping 的任何其他属性。需要在此处使用描述符而不是 TypeMapping,因为描述符具有 .AutoMap() 方法。还需要转换为接口,因为接口属性已明确实现。