Сделайте ElasticSearch Search, используя гнездо, которое не возвращает значения, если QueryContainer имеет значение null - PullRequest
0 голосов
/ 08 февраля 2019

Мне нужно создать запрос, который не возвращает значения, если QueryContainer равен нулю.Вот упрощенная версия моей проблемы.У меня есть несколько, если это проверить, если мои аргументы 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 и электронная почта имеют значение nullOrEmpty, fieldQuery завершается нулевым значением, и запрос проверяет только соответствие ClientId и ClientType, но мне нужноне вернуть результат в этой ситуации.

...