【发布时间】:2018-05-16 10:15:06
【问题描述】:
我正在构建以下查询,请注意过滤companyGroupId 我似乎找不到合适的方法来添加和条件Term。
我想检查includeTerminationDate 的值并有条件地添加term
简而言之,如果false 不返回带有终止日期的记录。
private Func<QueryContainerDescriptor<EmployeeDocument>, QueryContainer> EmployeeSearchQuery(string query, long companyGroupId, bool includeTerminationDate)
{
return q => q
.MultiMatch(m => m
.Query(query)
.Type(TextQueryType.MostFields)
.MinimumShouldMatch("90%")
.Fields(f => f
.Field(ff => ff.FullName, 3)
.Field(ff => ff.Number, 3)
.Field(ff => ff.Email)
.Field(ff => ff.JobNumber)
.Field(ff => ff.Description))) && q.Term(f => f.CompanyGroupId, companyGroupId);
}
其中一个原因就是复制代码并根据条件添加术语。但我想保留DRY Principle。另一种方式类似于下面的内容,我似乎无法弄清楚。
return q => q
.MultiMatch(m => m
.Query(query)
.Type(TextQueryType.MostFields)
.MinimumShouldMatch("90%")
.Fields(f => f
.Field(ff => ff.FullName, 3)
.Field(ff => ff.Number, 3)
.Field(ff => ff.Email)
.Field(ff => ff.JobNumber)
.Field(ff => ff.Description))) && q.Term(f => f.CompanyGroupId, companyGroupId)
&& !includeTerminationDate ? q.Term(f => f.TerminationDate, null) : 'Otherwise do not include term';
【问题讨论】:
标签: elasticsearch nest