ElasticSearch.net Массив поиска вложений возвращает все вложения с результатами поиска, как получить только совпадения

Class Mail
{
  public string MailID               {get;set;}

  [nested]
  public List<Attachment> attachments {get;set;}

}
Class Attachment
{
  public int AttachmentID {get;set;}

  public string Data {get; set;}   

  [nested]
  public Nest.attachment {get;set;}

}

Выше приведена моя структура индексации с данными Ingest-Pipeline, которые индексируются правильно, но при попытке выполнить поиск по содержимому вложения он возвращает объект вложения «дыра» со всеми вложениями вместе с фактическими вложениями поиска. в результате я хочу только вложения с результатом поиска

ниже мой запрос


                var response1 = elasticClient.Search<Mail>(s => s
                                          .Index(indexName)
                                          .Query(q =>
                                           q.Match(mq => mq.Field("attachments.attachment.content").Query("b"))
                                           ));


person Vaibhav Patil    schedule 13.03.2020    source источник
comment
При сопоставлении какой тип вложений является вложенным или объектным?   -  person jaspreet chahal    schedule 13.03.2020
comment
это вложенный объект   -  person Vaibhav Patil    schedule 13.03.2020


Ответы (1)


Поскольку вложения — это вложенное поле, вам необходимо использовать вложенный запрос

.Nested(c => c
    .Path(p => p.attachments)
    .InnerHits = new InnerHits {},
    .Query(q =>
           q.Match(mq => mq.Field("attachments.attachment.content").Query("b"))
))

В ответ вам нужно прочитать объект из внутренних хитов

person jaspreet chahal    schedule 13.03.2020
comment
Поскольку и вложения, и вложения имеют вложенный тип, вы пытались вложить их до второго уровня, например q.Nested(n => n.Path(attachments) .Query(q2=> q2.Nested( n2 => n2.Path(attachments. вложение) .Query(q3 =› - person jaspreet chahal; 13.03.2020