You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ElasticSearch 8.15 C# Client无法正确转换Kibana Terms查询

Elasticsearch 8.15 C#客户端Terms查询参数传递问题

问题场景

在Kibana中可正常运行的Terms查询语句:

GET product_it/_search
{
  "query": {
    "bool": {
      "filter": {
        "terms": {
          "slug": ["slug1", "slug2"]
        }
      }
    }
  }
}

但使用Elasticsearch 8.15的C#客户端转换时,无法正确传入slug字符串列表参数,现有代码片段:

var result = await Client.SearchAsync<Product>(s => s
            .Index(idsIndex)
            .Query(q => q.Bool(t => t.Filter(f => f.Terms())), cancellationToken);

解决方案

要正确传递slug列表参数,需在Terms()方法中明确指定目标字段和对应的列表值,以下是两种常用实现方式:

1. 强类型字段引用(推荐,支持编译时字段校验)

// 定义要过滤的slug列表
var targetSlugs = new List<string> { "slug1", "slug2" };

var result = await Client.SearchAsync<Product>(s => s
    .Index(idsIndex)
    .Query(q => q.Bool(t => t.Filter(f => f.Terms(term => term
        .Field(p => p.Slug) // 强类型关联Product类的Slug属性
        .Terms(targetSlugs)))))
    , cancellationToken);

2. 字符串字段名写法

var targetSlugs = new List<string> { "slug1", "slug2" };

var result = await Client.SearchAsync<Product>(s => s
    .Index(idsIndex)
    .Query(q => q.Bool(t => t.Filter(f => f.Terms("slug", targetSlugs))))
    , cancellationToken);

说明

原代码中f.Terms()未传入任何参数,因此无法生成符合预期的Terms查询结构。通过上述两种方式指定字段和值列表后,C#客户端会生成与Kibana中一致的查询语句,实现根据slug列表过滤文档的需求。

内容的提问来源于stack exchange,提问作者P_R

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 14:20:02