【问题标题】:NEST filtering source and creating instances of object using object constructorNEST 过滤源并使用对象构造函数创建对象实例
【发布时间】:2023-04-03 16:11:01
【问题描述】:

我在 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&lt;Report&gt;(),带有用于文本搜索的业务逻辑。

这是我的带有构造函数的类:

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 似乎不是一个选项,因为我们在数据库中拥有类似的选项,并且需要进行更多更改。

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

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

【问题讨论】:

    标签: c# elasticsearch nest elasticsearch-net


    【解决方案1】:

    这应该可以工作,因为 NEST 只使用 Json.net 进行序列化。

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

    【讨论】:

    • 工作就像一个魅力!
    猜你喜欢
    • 1970-01-01
    • 2021-03-05
    • 1970-01-01
    • 2015-10-08
    • 1970-01-01
    • 2016-07-01
    • 2013-11-17
    • 1970-01-01
    • 2023-03-21
    相关资源
    最近更新 更多