gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 13:55:12 34 4
gpt4 key购买 nike

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

现在我有一个带有字符串和 double 的类以及其中的其他类列表。我想保存字符串和 double ,但不包括我批量插入到 Elasticsearch 的列表。它要保存我类的每一个领域的每一条数据。是否有我错过的类成员属性或其他方式说“如果没有映射则不要添加此字段”?但愿如此。

最佳答案

使用 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.使用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);

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

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

关于c# - 忽略/不映射 NEST 2.0 中的某些 POCO 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36226651/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com