ElasticSearch, поиск объекта и исключение дополнительных данных из поля (массива) - PullRequest
0 голосов
/ 01 мая 2020

В течение последних двух дней я боролся с соответствующим запросом, который я хочу передать моему ElasticClient. Позвольте мне показать мой пример.

У меня есть такой индексированный объект:

public class IndexCompany  
{  
    [Keyword]  
    public Guid Id { get; set; }  
    ...  
    [Text]  
    public string Name { get; set; }   

    [Keyword]  
    public List<Guid> ClientIds { get; set; }

    [Keyword]  
    public List<Guid> NewsSubscriptions { get; set; }  
}

Я ищу компании, в которых есть идентификатор клиента. Звучит довольно просто:

var result = ElasticClient.Search<IndexCompany>(a => a
  .Query(q => q
   .Match(m => m
   .Field(f => f.ClientsIds)
   .Query(clientId.ToString()));

Но когда я получаю результат, поле public List<Guid> ClientIds содержит все другие идентификаторы; Мне это не нужно, например, это может быть более 100500 элементов.

Итак, мои вопросы:

  1. Что я должен добавить в свой запрос, чтобы исключить другие дополнительные идентификаторы из результата?
  2. Для поля public List<Guid> NewsSubscriptions { get; set; } У меня такая же ситуация, но если оно не содержит соответствующего идентификатора, должно возвращаться пустой список

Я пытался использовать агрегации, вложенные, термины, но я всегда получить тот же результат.

Буду признателен за совет или способ найти что попробовать. Или, если я ошибаюсь в своих идеях, пожалуйста, объясните.

...