在 Elastic Search Nest Client .NET 中实现搜索查询的异步方式

Async way of implementing search query in Elastic Search Nest Client .NET

我已经通过 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 对象以将其映射回我的原始项目模型。 提前致谢

SearchAsync<T>()中,responseTask<ISearchResponse<T>>,所以你可能想要await