Nest NamedFilters需要承诺

问题描述

我有简单的弹性要求:

var request4 =
                _client.Search<T>(s => s
                    .Aggregations(aggs =>
                        aggs.Filters("FacetedSearch",f => f
                                .NamedFilters(g =>
                                    {
                                            var namedFilters = new NamedFiltersContainer();
                                            

                                            foreach (var facet in _facets)
                                        {
                                            namedFilters.Add(facet.Key,Query<T>.Terms(p => new nest.TermsQuery
                                                    {Field = facet.Key,Terms = 
                                                            new[] {facet.Value}}));
                                        }

                                        return namedFilters;
                                    })

但是,编译器需要nest.IPromise<nest.INamedFiltersContainer>,我还没有找到可以构造给定类型的Promise的构造函数。有什么方法可以将NamedFiltersContainer转换为prmosie吗?

解决方法

您可以使用传递给委托的参数来组成命名过滤器

var client = new ElasticClient();

var _facets = new Dictionary<string,string>
{
    ["foo"] = "bar",["baz"] = "quux"
};

var request4 = client.Search<object>(s => s
    .Aggregations(aggs =>
        aggs.Filters("FacetedSearch",f => f
            .NamedFilters(g =>
            {
                foreach (var facet in _facets)
                {
                    g.Filter(facet.Key,Query<object>.Terms(p => p
                         .Field(facet.Key)
                         .Terms(new[] { facet.Value })
                        )
                    );
                }

                return g;
            })
        )
    )
);

收益

{
  "aggs": {
    "FacetedSearch": {
      "filters": {
        "filters": {
          "foo": {
            "terms": {
              "foo": ["bar"]
            }
          },"baz": {
            "terms": {
              "baz": ["quux"]
            }
          }
        }
      }
    }
  }
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...