如果QueryContainer为null,我需要进行一个不返回任何值的查询。这是我问题的简化版本。如果检查我的args是否为nullOrEmpty以及该值是否有效,我会在查询中添加一个QueryContainer
启动搜索的代码:
var searchResponse = client.Search<ClientTaskModel>(s => s.Index(new[] { config.ClientIndexName })
.From(args.Index)
.Size(args.Count)
.Query(fp => FilterTask(fp, args)));
为搜索创建QueryContainer的函数
private QueryContainer FilterTask(QueryContainerDescriptor<ClientTaskModel> container, GetSimilarClientsTaskArgs args)
{
QueryContainer fieldQuery = null;
if (!string.IsNullOrWhiteSpace(args.Sin))
{
fieldQuery |= container.Match(g => g.Field(f => f.Sin).Query(args.Sin).Verbatim());
}
if (!string.IsNullOrWhiteSpace(args.Email))
{
fieldQuery |= container.Match(g => g.Field(f => f.Email).Query(args.Email).Verbatim());
}
return !container.Match(g => g.Query(args.ClientId.ToString()).Field(f => f.ClientId).Verbatim()) &&
container.Terms(t => t.Field(f => f.ClientType).Terms(compareType) && fieldQuery
}
问题是当SIN和Email为nullOrEmpty时,fieldQuery最终为null,并且查询仅检查ClientId和ClientType是否匹配,但是在这种情况下我不需要返回任何结果。