代码之家  ›  专栏  ›  技术社区  ›  Evaldas Buinauskas

嵌套过滤源并使用对象构造函数创建对象实例

  •  0
  • Evaldas Buinauskas  · 技术社区  · 9 年前

    我对NEST client中的源代码过滤有问题。

    这是我的代码示例:

    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

    问题是 Abstract itemAbstract . 之所以这样做是因为 abstract 是C#中的保留关键字。如果我将构造函数中的字段名更改为 @abstract -这是可行的,但似乎不对,因为我必须使用保留关键字。

    摘要 ItemAbstract 这似乎不是一个选项,因为我们在数据库中有这样的选项,这将需要更多的更改。

    摘要 我的字段 searchRequest 进入 Report 构造函数作为 项目摘要 . 希望这是有道理的。

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

    1 回复  |  直到 9 年前
        1
  •  2
  •   Filip Cordas    9 年前

    这应该是可行的,因为NEST只使用Json。net进行序列化。

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