2017-10-28 124 views
0

目前,我们已在我们的多搜索查询中修复了3个搜索查询。代码如下:c#nest:如何将elasticsearch搜索查询动态附加到多搜索嵌套查询?

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,第二&第三回“2型和3型”文档。

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

我读this文章,但不能得到相同的巢版本5.X和我不知道如何用QueryContainer写查询?

+0

[MultiSearchApiTests](https://github.com/elastic/elasticsearch-net/blob/5.5/src/Tests/Search/MultiSearch/MultiSearchApiTests.cs)应该为您的问题提供一些信息。 – Rob

+0

我已经完成了这部分。我有我的问题在“流利的sytax”。如何在“新的QueryContainer()”中使用流畅的查询? (将所有内容转换为OIS需要付出很多努力) – maverick

+0

@Rob:任何想法?我已经发布了这个新的问题..可能你会得到一些细节在这个链接: - https://stackoverflow.com/questions/46999703/how-to-write-fluent-syntax-query-in-querycontainer – maverick

回答

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); 

希望有所帮助。来自NEST测试项目的

+0

它帮助。一种类型的查询仍然没有解决:-https://codeshare.io/anqDbj – maverick

+0

我该如何将内部使用的“ss”代码移动到排序脚本中? – maverick

+0

我不明白你的问题它不编译或者你想在其他搜索中重复使用它? – Rob