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

如何使用NEST(ElasticSearch)多值查询指定条件的campaigns数据

没问题,我来帮你实现这个NEST查询!

使用NEST实现指定条件的Elasticsearch查询

首先,建议你定义一个和Elasticsearch文档结构对应的实体类,这样查询时更类型安全:

public class Campaign
{
    public int PublisherId { get; set; }
    public string CurrentStatus { get; set; }
}

我们可以通过NEST的**布尔查询(Bool Query)**来组合你需要的两个条件:

  1. 精确匹配PublisherId = 1
  2. CurrentStatus属于指定的状态列表(Approved/Rejected)

实现代码示例

假设你已经初始化好了ElasticClient实例,下面提供两种常用的实现方式:

方式一:流畅查询DSL写法

// 定义要筛选的目标状态列表
var targetStatuses = new[] { "Approved", "Rejected" };

var searchResponse = elasticClient.Search<Campaign>(s => s
    .Index("campaigns") // 指定要查询的索引
    .Query(q => q
        .Bool(b => b
            .Must(
                // 第一个条件:精确匹配PublisherId=1
                m => m.Term(t => t.PublisherId, 1),
                // 第二个条件:匹配指定的状态列表,对应Linq的Contains逻辑
                m => m.Terms(t => t.Field(f => f.CurrentStatus).Terms(targetStatuses))
            )
        )
    )
);

// 提取查询到的结果
var filteredCampaigns = searchResponse.Documents.ToList();

方式二:对象初始化语法写法

如果你更习惯类似Linq的对象初始化风格,可以用这种方式:

var targetStatuses = new[] { "Approved", "Rejected" };

var searchRequest = new SearchRequest<Campaign>("campaigns")
{
    Query = new BoolQuery
    {
        Must = new List<QueryContainer>
        {
            new TermQuery { Field = "PublisherId", Value = 1 },
            new TermsQuery { Field = "CurrentStatus", Terms = targetStatuses }
        }
    }
};

var searchResponse = elasticClient.Search<Campaign>(searchRequest);
var filteredCampaigns = searchResponse.Documents.ToList();

关键逻辑说明

  • TermQuery用于精确匹配数字类型的PublisherId,如果你的PublisherId是字符串类型,可以换成MatchQuery
  • TermsQuery对应Linq中的statuses.Contains(c.CurrentStatus),实现多值匹配
  • BoolQuery.Must会将两个条件组合成逻辑AND,完全符合你给出的Linq查询逻辑

预期查询结果

执行上述任意一种查询后,返回的结果会和你预期的一致:

"hits" : [
{ "_index" : "campaigns", "_id" : "39436cb3-483e-4fb4-92e4-4e06ecad27a1", "_source" : { "PublisherId" : 1, "CurrentStatus" : "Approved" } },
{ "_index" : "campaigns", "_id" : "21436cb1-583e-4fb4-92e4-4e06ecad23a2", "_source" : { "PublisherId" : 1, "CurrentStatus" : "Rejected" } }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 11:32:34