ElasticSearch. net Array of Attachment Search возвращает все вложения с результатами поиска, как получать только попадания - PullRequest
0 голосов
/ 13 марта 2020
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"))
                                           ));

1 Ответ

0 голосов
/ 13 марта 2020

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

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

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

...