Асинхронный способ реализации поискового запроса в Elastic Search Nest Client .NET - PullRequest
0 голосов
/ 02 мая 2019

Я реализовал поисковый запрос через NEST-клиент и смог получить записи. Код выглядит следующим образом.

 var response = clientProvider.Client.Search<ProjectModel>(s => s
                   .Index("project_index")
                   .Type("projects")
                   .Source(so => so.Excludes(f => f.Field(x => x.FileInfo.FileBase64Data)))
                   .Size(100)
                   .Query(q => q
                       .Bool(b => b
                           .Should(
                               m => m.QueryString(qs => qs
                                    .Query(searchOptions.SearchTerm)
                                    .Fields(ff => ff.Fields(fields))
                                    .Fuzziness(Fuzziness.Auto)

                                    ),
                               m => m.MultiMatch(qs => qs
                                    .Query(searchOptions.SearchTerm)
                                    .Type(Nest.TextQueryType.PhrasePrefix)
                                    .Fields(ff => ff.Fields(fields))

                                    )
                                  )
                            )
                         )
                           .Sort(ss => ss.Descending(SortSpecialField.Score))
                         );

И я отображаю ответ на мою модель проекта следующим образом.

 var project = response.Hits.Select(h =>
                {
                    h.Source._id = h.Id;
                    h.Source.Score = h.Score;
                    return h.Source;
                }).ToList();

Когда я пытаюсь реализовать тот же поиск в асинхронном режиме, что

 var response = clientProvider.Client.SearchAsync<ProjectModel>(s => s
                   .Index("project_index")
                   .Type("projects")
                   .Source(so => so.Excludes(f => f.Field(x => x.FileInfo.FileBase64Data)))
                   .Size(100)
                   .Query(q => q
                       .Bool(b => b
                           .Should(
                               m => m.QueryString(qs => qs
                                    .Query(searchOptions.SearchTerm)
                                    .Fields(ff => ff.Fields(fields))
                                    .Fuzziness(Fuzziness.Auto)

                                    ),
                               m => m.MultiMatch(qs => qs
                                    .Query(searchOptions.SearchTerm)
                                    .Type(Nest.TextQueryType.PhrasePrefix)
                                    .Fields(ff => ff.Fields(fields))

                                    )
                                  )
                            )
                         )
                           .Sort(ss => ss.Descending(SortSpecialField.Score))
                         );

Я не получаю никаких ошибок при его выполнении. Но я не могу получить объекты response.Hits, чтобы сопоставить их с моей исходной моделью проекта. Заранее спасибо

1 Ответ

0 голосов
/ 02 мая 2019

В SearchAsync<T>(), response - это Task<ISearchResponse<T>>, так что вы, вероятно, захотите await это

...