c#nest:如何动态地将elasticsearch搜索查询附加到多搜索嵌套查询?

时间:2017-10-28 21:34:05

标签: c# elasticsearch nest

目前,我们已在多重搜索查询中修复了3个搜索查询。代码如下:

var results = elasticClient.MultiSearch(a => a
                           .Search<StockBaseEntity>(s => s
                           .Type("<docType>")
                           .Index(<indexName>)
                           .Take(<count>)
                           .Query(qq => qq
                           ...
                           .Search<StockBaseEntity>(s => s
                           .Type("<docType>")
                           .Index(<indexName>)
                           .Take(<count>)
                           .Query(qq => qq
                           ....
                           .Search<StockBaseEntity>(s => s
                           .Type("<docType>")
                           .Index(<indexName>)
                           .Take(<count>)
                           .Query(qq => qq
                           ....

所有三个搜索查询都有一些不同的查询参数,例如,第一个查询返回“type1”doc,second&amp;第三次分别返回“type2和type3”文档。

我们希望以这样的方式构建这个多搜索嵌套查询:我们可以在多个searach查询中使用任意数量的搜索嵌套查询(而不仅仅是3个)。它可能是3/4/5或基于某些条件的任意数量的搜索查询。如果我们可以将搜索查询附加到multisearch,这可以实现吗?我们可以这样做吗?

我读过this文章,但是对于嵌套版本5.X无法获得相同的内容,我不知道如何使用QueryContainer编写查询?

1 个答案:

答案 0 :(得分:1)

一种选择是使用MultiSearchRequest并将其与搜索描述符结合使用。

var multiSearchRequest = new MultiSearchRequest{};

multiSearchRequest.Operations = new Dictionary<string, ISearchRequest>();
multiSearchRequest.Operations["search1"] = new SearchDescriptor<object>().Query(q => q.MatchAll());
multiSearchRequest.Operations["search2"] = new SearchDescriptor<object>().Query(q => q.MatchAll());
multiSearchRequest.Operations["search3"] = new SearchDescriptor<object>().Query(q => q.MatchAll());

elasticClient.MultiSearch(multiSearchRequest);

希望有所帮助。