我在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属性,而是想要拥有一个构造函数。

上面的代码几乎可以正常工作:

  • ReportId分配了
  • 标题已分配

  • 问题是未分配Abstract字段,因为构造函数将其声明为itemAbstract。这样做是因为abstract是C#中的保留关键字。如果我将构造函数中的字段名称更改为@abstract,则可以正常工作,但似乎不正确,因为我必须使用reserved关键字。

    Abstract更改为ItemAbstract似乎不是一种选择,因为我们在数据库中具有类似的功能,这需要进行更多更改。

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

    我愿意接受任何其他清洁且有意义的解决方案。

    最佳答案

    这应该起作用,因为NEST仅使用Json.net进行序列化。

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

    关于c# - NEST过滤源并使用对象构造函数创建对象实例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46785109/

    10-11 11:04