2016-03-25 11 views
3

私は、Elasticsearch 2.2のラッパーであるNEST 2.0で詳細を見つけるのに苦労しています。私の質問はこれです:オブジェクト(パブリックデータメンバーを持つクラス)の一括挿入を行い、私のC#クラスとESサーバーマッピングの間のマッピングされたフィールドのみが保存されるElasticsearchにマッピングできますか?そして私のクラスには追加フィールドを追加しません。私は欲しくないのですか?NEST 2.0で特定のPOCOプロパティを無視/マッピングしない

今私は、文字列と2倍のクラスとその中の他のクラスのリストを持っています。私は弦とダブルスを保存したいが、Elasticsearchへのバルクインサートのリストは含めないでください。私のクラスのすべてのフィールドにすべてのデータを保存したいと考えています。クラスメンバーの属性や、「マッピングがない場合はこのフィールドを追加しないでください」と言っている他の方法がありますか?そうだといい。

+0

インデックスマッピングを設定する現在のコードを共有できますか?属性ベースのマッピングを使用していますか? – Rob

+0

これはクローズドネットワークシステムなので、私はコードを投稿できません。 –

+0

タイトルをもっと冗長にする方法はありますか? – theMayer

答えて

7

NEST 2.xでは、さまざまな方法でPOCOのプロパティを無視できます。のは、(この例では、StringAttributeIgnoreViaAttributeのプロパティ)派生ElasticsearchPropertyAttributeタイプのIgnoreプロパティを1.Using

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; } 
} 

はPOCO

に無視されるべきであるプロパティに適用した例として、以下のPOCOを使用してみましょう

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

2.Usingこれらの設定は、ConnectionSettingsのインスタンスごとにキャッシュされています。

3. IElasticsearchSerializerによって理解され、シリアライザのCreatePropertyMapping()の内部で検査されるPOCOプロパティに適用されるignore属性を使用します。デフォルトのJsonNetSerializerの場合、これはJson.NET JsonIgnoreAttributeです。この例では、これはIgnoreViaSerializerSpecificAttributeプロパティに適用された属性によって示されています。

+0

ドキュメントは現在elastic.coにアップされています - https://www.elastic.co/guide/en/elasticsearch/client/net-api/2.x/auto-map .html#ignoring-properties –

1

少し掘り下げて小さなクラスをテストすると、NEST 2.0 C#でクラスを投稿するときに次の構造が本当に属性を隠してしまったことがわかりました。これをクラスメンバの直上に置いた場合、それをカバーする一括追加を行うときは無視します。

[String(Ignore = true)] 
関連する問題