如果QueryContainer为null,则使用不返回任何值的嵌套进行ElasticSearch搜索

时间:2019-02-08 16:15:03

标签: c# elasticsearch nest

如果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是否匹配,但是在这种情况下我不需要返回任何结果。

0 个答案:

没有答案