我在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
属性,而是想要拥有一个构造函数。上面的代码几乎可以正常工作:
为
问题是未分配
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/