【问题标题】:c# nest: how to dynamically append elasticsearch search queries to multi search nest query?c#nest:如何将弹性搜索搜索查询动态附加到多搜索嵌套查询?
【发布时间】:2017-10-28 21:34:05
【问题描述】:

目前,我们在多搜索查询中修复了 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”文档,第二个和第三个分别返回“type2 和 type3”文档。

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

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

【问题讨论】:

  • 来自 NEST 测试项目的 MultiSearchApiTests 应该对您的问题有所了解。
  • 这部分我已经完成了。我对“流利的语法”有疑问。如何将流利的查询放入“new QueryContainer()”中? (因为将所有内容都转换为 OIS 需要付出太多努力)
  • @Rob:有什么想法吗?我已经为此发布了新问题..您可能会在此链接中获得一些详细信息:- stackoverflow.com/questions/46999703/…

标签: c# elasticsearch nest


【解决方案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);

希望对您有所帮助。

【讨论】:

  • 如何移动也用于排序脚本的“ss”代码?
  • 我不明白你的问题?它没有编译或者你想在其他搜索中重复使用它?
  • 有一些排序脚本,但我已经修改了它,现在似乎可以工作了。感谢您的帮助
猜你喜欢
  • 2021-03-02
  • 2021-09-01
  • 2015-09-24
  • 2017-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-26
  • 1970-01-01
相关资源
最近更新 更多