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

Dal*_*ham 3 c# elasticsearch nest

我很难在NEST 2.0上找到很好的细节,这是我使用的Elasticsearch 2.2的包装器.我的问题是:我可以在一个对象(具有公共数据成员的类)上进行批量插入,并将其映射到Elasticsearch,其中只有我的C#类和ES服务器映射之间的映射字段将保存?并且它不会在我的班级中添加我不想要的其他字段?

现在我有一个包含字符串和双精度的类以及其他类的列表.我想保存字符串和双精度数,但不包括我在Elasticsearch上的批量插入列表.它希望在我班级的每个领域保存每一段数据.是否有类成员属性或其他方式说"如果没有映射,请不要添加此字段"我错过了?希望如此.

Rus*_*Cam 7

您可以通过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; }
}
Run Code Online (Sandbox Code Playgroud)

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

2. .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);
Run Code Online (Sandbox Code Playgroud)

每个实例都缓存这些设置ConnectionSettings.

3.使用应用于POCO属性的ignore属性,该属性由序列化程序中IElasticsearchSerializer使用和检查的内部所理解CreatePropertyMapping().在默认情况下JsonNetSerializer,这是Json.NET JsonIgnoreAttribute.在我们的示例中,应用于属性的属性证明了这一点IgnoreViaSerializerSpecificAttribute.