2017-10-17 27 views
0

NESTクライアントでソースフィルタに問題があります。ソースをフィルタリングし、オブジェクトコンストラクタを使用してオブジェクトのインスタンスを作成します。

var searchRequest = client.Search<Report>(analysisDescriptor 
    .Source(s => s 
    .Includes(i => i 
     .Fields(
     f => f.ReportId, 
     f => f.Abstract, 
     f => f.Title 
    ) 
    ) 
) 
    .Size(10)); 

analysisDescriptorは、テキスト検索のためのビジネス・ロジックとnew SearchDescriptor<Report>()次のとおりです。

は、これは私のコードサンプルです。

これはコンストラクタと私のクラスである:

public class Report 
{ 
    public Report(int reportId, string itemAbstract, string title) 
    { 
    Abstract = itemAbstract; 
    ReportId = reportId; 
    Title = title; 
    /* Other fields */ 
    } 

    public int ReportId { get; } 
    public string Abstract { get; } 
    public string Title { get; } 
    /* Other fields */ 
} 

今の問題は、ハイテクリードがset性質を持っていると思いますし、代わりにコンストラクタを持ってしたくないということです。

ほとんど作品上記のコード:

  1. ReportIdが
  2. タイトルが割り当てられているが

が割り当てられている問題は、コンストラクタは、それがitemAbstractとして宣言しているので、Abstractフィールドが割り当てられていないということです。これは、abstractがC#の予約済みキーワードであるために行われています。コンストラクタのフィールド名を@abstractに変更すると、これは機能しますが、予約されたキーワードを使用する必要があるため正しく表示されません。

AbstractItemAbstractを変更すると、データベースのようなものがあり、さらに変更が必要になるため、オプションのようには見えません。

私はAbstractフィールドをsearchRequestからReportコンストラクタにitemAbstractに渡す方法を探しています。うまくいけばそれは理にかなっている。

私は清潔で意味がある他のソリューションには公開されています。

答えて

2

NESTはJson.netをシリアライゼーションに使用するだけなので、これはうまくいくはずです。

public Report(int reportId,[JsonProperty("abstract")]string itemAbstract, string title) 
    { 
    Abstract = itemAbstract; 
    ReportId = reportId; 
    Title = title; 
    /* Other fields */ 
    } 
+0

チャームのように働いた! –

関連する問題