elasticsearch - 嵌套DSL语法中的多个术语

标签 elasticsearch nest dsl

我正在尝试将以下查询转换为NEST DSL语法:

{
  "aggs": {
    "color": {
      "terms": {
        "field": "Color"
      }
    },
    "weight": {
      "terms": {
        "field": "Weight"
      }
    }
  }
}
每个术语都来自包含名称和fieldId的列表。到目前为止,我已经做到了:
  var request2 = _client.Search<T>(s => s
               .Aggregations(aggs =>
                   aggs.Terms("Weight", x => x.Field("Weight")).Terms("Color", x => x.Field("Weight"))));


这可以按预期工作,但是我需要能够动态提供参数WeightColor,因为可以使用不同的参数集调用该方法。有没有办法使用类似的东西:
aggs.Terms(x => x.field( myList.foreach(y.value))));

我猜想这将与对象初始化器语法一起使用会更好,但是我宁愿在dsl中使用它。

最佳答案

像下面的东西会工作

var client = new ElasticClient();

var fields = new List<string>
{
    "color",
    "weight",
    "foo",
    "bar"
};

var response = client.Search<object>(s => s
    .Aggregations(aggs =>
    {
        foreach (var field in fields)
        {
            aggs.Terms(field, t => t.Field(field));
        }

        return aggs;
    })
);
生成以下请求
{
  "aggs": {
    "color": {
      "terms": {
        "field": "color"
      }
    },
    "weight": {
      "terms": {
        "field": "weight"
      }
    },
    "foo": {
      "terms": {
        "field": "foo"
      }
    },
    "bar": {
      "terms": {
        "field": "bar"
      }
    }
  }
}

关于elasticsearch - 嵌套DSL语法中的多个术语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64593201/

相关文章:

.net - ElasticSearch NEST 检查空值

elasticsearch - 无论如何,在聚合之前是否要对索引进行排序

elasticsearch - Elasticsearch 2.0 GreaterOrEquals NEST 2.0

f# - 使用 SRTP 在 F# 中实现无标记最终编码

java - 编译器翻译代码的形式化符号

elasticsearch - 在哪里列出了所有ElasticSearch Config参数?

ElasticSearch:如何存储产品属性

typescript - TypeError : this. graphInspector.insertEnhancerMetadataCache 不是一个函数

elasticsearch - 我如何在Elasticsearch NEST函数中应用过滤器

ruby - sinatra hello world 示例如何工作?