Один из способов добиться этого - преобразовать выражение в группу методов и условно добавить запрос
.
private Func<QueryContainerDescriptor<EmployeeDocument>, QueryContainer> EmployeeSearchQuery(string query, long companyGroupId, bool includeTerminationDate)
{
return q =>
{
var qc = 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);
// whatever your logic is for adding termination date
if (includeTerminationDate)
qc &= q.Term(f => f.TerminationDate, DateTime.UtcNow);
return qc;
};
}
Затем использовать
client.Search<EmployeeDocument>(s => s
.Query(EmployeeSearchQuery("query", 2, false))
);
1007 * излучает *
{
"query": {
"bool": {
"must": [
{
"multi_match": {
"type": "most_fields",
"query": "query",
"minimum_should_match": "90%",
"fields": [
"fullName^3",
"number^3",
"email",
"jobNumber",
"description"
]
}
},
{
"term": {
"companyGroupId": {
"value": 2
}
}
}
]
}
}
}
и
client.Search<EmployeeDocument>(s => s
.Query(EmployeeSearchQuery("query", 2, true))
);
излучает
{
"query": {
"bool": {
"must": [
{
"multi_match": {
"type": "most_fields",
"query": "query",
"minimum_should_match": "90%",
"fields": [
"fullName^3",
"number^3",
"email",
"jobNumber",
"description"
]
}
},
{
"term": {
"companyGroupId": {
"value": 2
}
}
},
{
"term": {
"terminationDate": {
"value": "2018-05-16T23:21:16.8309753Z"
}
}
}
]
}
}
}