我对C#中使用的Elastic Search和Elastic Search API很陌生:PlainElastic.Net。
我有一个简单的请求,但我一直坚持下去:如何在我的querybuiler中添加多个(非硬编码的)构面?
//code has been simplified
//list of fields I want to be added in my facet part of the querybuilder
List<string> FacetFields = new List<string>{"field1", "field2", "fieldN"};
//qb is already instantiated with a simple ES query
//I want now to add facets definition
qb.Facets(_facets =>
FacetFields.ForEach(_ff =>
_facets.Terms(t => t
.FacetName("FacetsFor" + _ff)
.Field(_ff)
);
});
);
这不会编译,错误是:
Can not convert lambda expression to delegate type '
System.Func<PlainElastic.Net.Queries.Facets<MyType>,PlainElastic.Net.Queries.Facets<MyType>>
', as some return types of block are not implicitly convertible to the return type delegate
最佳答案
我不是C#的人,但是与我的Ruby代码相比,我认为您内心深处。
目的是使最终的JSON看起来像
"facets" : {
"facet_name1" : { "terms" : {"field" : "tags"} }
"facet_name2" : { "terms" : {"field" : "user"} }
}
查看您的代码,看起来您的结果可能是术语位于每个子句的外部,且其中的构面名称位于其中。如果那是代码实际在做的话,那是不正确的。
如果您有办法查看库生成的JSON或查询后来自Elasticsearch的输出,那么您肯定可以看到ES收到的查询的样子,这对于调试我自己的查询至关重要。
在每个命名的面孔内,您也可以添加其他过滤条件,但首先要使简单的案例开始工作,首先是一个方面,然后是两个方面,然后是更复杂的过滤条件。
关于c# - 在我的querybuiler中添加多个(非硬编码)构面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15951696/