2017-10-17 128 views
0

我在使用NEST客户端进行源过滤时遇到问题。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)); 

哪里analysisDescriptornew 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. 标题分配

的问题是,Abstract场不分配,因为构造函数有它宣布为itemAbstract。这已完成,因为abstract是C#中的保留关键字。如果我将构造函数中的字段名称更改为@abstract - 这可行,但似乎不正确,因为我必须使用保留关键字。

Abstract更改为ItemAbstract似乎不是一种选择,因为我们在数据库中拥有它,并且需要更多的更改。

所以理想情况下,我正在寻找一种方法将我的searchRequest中的Abstract字段传递给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

工作就像一个魅力! –

相关问题