c# - 在我的querybuiler中添加多个(非硬编码)构面

标签 c# elasticsearch faceted-search plainelastic.net

我对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/

相关文章:

c# - 如何在 Azure 函数中使用带有主题/订阅的服务总线触发器

C# 导出带分号的 CSV 文件

c# - 您知道执行此 "massive"linq 过滤的另一种方法吗?

c# - Visual Studio 2010 在崩溃时清空文件

针对字段的 Elasticsearch 匹配列表

搜索查询以在禁用 _source 的情况下在 elasticsearch 中检索嵌套文档

Elasticsearch - 一般架构和 Elastic Cloud 问题

用于不包括某些字段的分面搜索的 Elasticsearch 聚合

java - 如何执行分面搜索?

Drupal:重用多面搜索 block