忽略/不映射 NEST 2.0 中的某些 POCO 属性

Ignoring / Not Mapping certain POCO properties in NEST 2.0

我很难找到关于 NEST 2.0 的详细信息,NEST 2.0 是我正在使用的 Elasticsearch 2.2 的包装器。我的问题是:我可以对一个对象(class 和 public 数据成员)进行批量插入并将其映射到 Elasticsearch,其中只有我的 C# class 和 ES 之间的映射字段服务器映射会保存吗?而且它不会在我的 class 中添加我不想要的附加字段?

现在我有一个 class 的,里面有字符串和双打以及其他 class 的列表。我想保存字符串和双打,但不包括我批量插入到 Elasticsearch 的列表。它要保存我class的每个字段的每一条数据。是否有我错过的 class 成员属性或其他表示 "do not add this field if it has no mapping" 的方式?但愿如此。

您可以使用 NEST 2.x 以多种方式忽略 POCO 的属性。下面以POCO为例

using Nest;
using Newtonsoft.Json;

[ElasticsearchType(Name = "company")]
public class Company
{
    public string Name { get; set; }

    [String(Ignore = true)]
    public string IgnoreViaAttribute { get; set; }

    public string IgnoreViaSettings { get;set; }

    [JsonIgnore]
    public string IgnoreViaSerializerSpecificAttribute { get; set; }
}

1.Using Ignore 属性 在派生的 ElasticsearchPropertyAttribute 类型上(在我们的示例中,StringAttributeIgnoreViaAttribute 属性) 应用于 POCO

上应忽略的 属性

2.Using .InferMappingFor<TDocument>(Func<ClrTypeMappingDescriptor<TDocument>, IClrTypeMapping<TDocument>> selector) 关于连接设置

var settings = new ConnectionSettings(new Uri("http://localhost:9200"))
    .InferMappingFor<Company>(i => i
        .Ignore(p => p.IgnoreViaSettings)
    );

var client = new ElasticClient(settings);

这些设置缓存在每个 ConnectionSettings 实例中。

3.Using 一个应用于 POCO 属性 的忽略属性,被使用的 IElasticsearchSerializer 理解,并在序列化程序的 CreatePropertyMapping() 内部进行检查。在默认 JsonNetSerializer 的情况下,这是 Json.NET JsonIgnoreAttribute。在我们的示例中,这通过应用于 IgnoreViaSerializerSpecificAttribute 属性 的属性来证明。

我通过深入挖掘并测试一个小 class 发现,当您使用 NEST 2.0 C# post a class 时,以下结构确实隐藏了属性。如果您在 class 成员上方执行此操作,则在执行覆盖它的批量添加时您希望忽略。

[String(Ignore = true)]