NEST 过滤源并使用 object 构造函数创建 object 的实例
NEST filtering source and creating instances of object using object constructor
我在 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>()
具有文本搜索的业务逻辑。
这是我的 class 构造函数:
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
- 这可行,但似乎不正确,因为我必须使用保留关键字。
将 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 */
}
我在 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>()
具有文本搜索的业务逻辑。
这是我的 class 构造函数:
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
- 这可行,但似乎不正确,因为我必须使用保留关键字。
将 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 */
}