【问题标题】:elasticsearch nest: create SearchRequest with multi Aggregations using the object initializer syntaxelasticsearch nest:使用对象初始值设定项语法创建具有多个聚合的 SearchRequest
【发布时间】:2017-01-15 08:12:05
【问题描述】:

我正在寻找如何使用对象初始化器语法来初始化具有多个无嵌套聚合的 SearchRequest 对象。

如果请求通过 lambda 表达式帮助器作为参数提供给 ElasticClient.Search(),它将如下所示:

   var response = Client.Search<person>(s => s.Aggregations(a => 
            a.Terms("bucketAge", t => t.Field("age").Size(50))
             .Terms("bucketCity", t => t.Field("city").Size(50))));

自相矛盾的是我发现我如何用嵌套的 Agg 编写 Agg

 var searchRequest = new SearchRequest<person>
        {
            Size = 0,
            Aggregations =
           new TermsAggregation("bucketAge")
           {
               Field = "age",
               Size = 50,
               Aggregations = new TermsAggregation("bucketcity")
               {
                   Field = "city",
                   Size = 50
             }
           }
        };

但我无法用 2 个 aggs 与类似的东西在同一级别上初始化 SearchRequest:

var searchRequest = new SearchRequest<person>
{
        Size = 0,
        Aggregations =
        {
              new TermsAggregation("bucketAge")
              {
                  Field = "age",
                  Size = 50
              },
              new TermsAggregation("bucketcity")
              {
                  Field = "city",
                  Size = 50
              }
         }
 };

请问这个怎么做?

【问题讨论】:

    标签: elasticsearch nest


    【解决方案1】:

    使用 Object Initializer 语法,您可以将聚合与 &amp;&amp; 结合起来

    var searchRequest = new SearchRequest<person>
    {
        Size = 0,
        Aggregations =
          new TermsAggregation("bucketAge")
          {
              Field = "age",
              Size = 50
          } &&
          new TermsAggregation("bucketcity")
          {
              Field = "city",
              Size = 50
          }
    
    };
    
    var searchResponse = client.Search<person>(searchRequest);
    

    如果您愿意,可以使用聚合字典来使用更长的方法

    var aggregations = new Dictionary<string, AggregationContainer>
    {
        { "bucketAge", new TermsAggregation("bucketAge")
          {
              Field = "age",
              Size = 50
          }
        },
        { "bucketcity", new TermsAggregation("bucketcity")
          {
              Field = "city",
              Size = 50
          }
        },
    };
    
    var searchRequest = new SearchRequest<person>
    {
        Size = 0,
        Aggregations = new AggregationDictionary(aggregations)
    };
    
    var searchResponse = client.Search<person>(searchRequest);
    

    请注意,Dictionary&lt;string, AggregationContainer&gt; 中的键将是请求中聚合的名称。

    【讨论】:

    • 非常感谢!你的回答真的很好解释和充分。是否存在解释巢的所有这些方面的链接?我只找到一个页面,我可以看到一个显示 && 的示例,但我担心我没有使用正确的术语进行搜索。
    猜你喜欢
    • 1970-01-01
    • 2020-09-21
    • 1970-01-01
    • 2018-11-06
    • 2016-06-22
    • 2022-10-04
    • 1970-01-01
    • 1970-01-01
    • 2019-08-19
    相关资源
    最近更新 更多