NEST过滤源并使用对象构造函数

时间:2017-10-17 07:49:43

标签: c# elasticsearch nest elasticsearch-net

我在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. 分配标题
  3. 问题是未分配Abstract字段,因为构造函数将其声明为itemAbstract。之所以这样做是因为abstract是C#中的保留关键字。如果我将构造函数中的字段名称更改为@abstract - 这可行,但似乎不正确,因为我必须使用保留关键字。

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

    理想情况下,我正在寻找一种方法,将Abstract字段从searchRequest传递到Report构造函数itemAbstract。希望这是有道理的。

    我对任何其他干净且有意义的解决方案持开放态度。

1 个答案:

答案 0 :(得分:2)

这应该有效,因为NEST只使用Json.net进行序列化。

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