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

.Net MAUI中Elastic.Client v8替代QueryContainer方案咨询

Elastic.Client v8 替代旧版QueryContainer实现多舞蹈类型过滤方案

在Elastic.Client v8中,确实可以用QueryDescriptor<T>替代旧版的QueryContainer来实现你的多舞蹈类型过滤需求,以下是改造后的完整代码:

public async Task<IEnumerable<string?>> SearchEventsByDanceTypeAsync(IEnumerable<string?> selectedDanseTypes)
{
    if (!selectedDanseTypes.Any())
    { 
        return await Task.Run(() => dbService.GetAllEventsFromDb().Select(e => e.Id));
    }

    var searchResponse = await _client.SearchAsync<EventIndex>(s => s
        .Query(q => q
            .Bool(b => b
                .Should(selectedDanseTypes.Select(danceType => 
                    q.Match(m => m
                        .Field(f => f.DanceType)
                        .Query(danceType)
                    )
                ))
            )
        )
    );

    var eventIds = searchResponse.Documents.Select(e => e.Id).ToArray();
    return eventIds;
}

关键改动说明

  • 不再需要手动创建QueryContainer实例,直接通过QueryDescriptor<T>的Match方法构造单个匹配查询
  • Bool.Should方法现在接受一组Func<QueryDescriptor<EventIndex>, Query>委托,通过Select将每个选中的舞蹈类型转换为对应的Match查询即可
  • 强类型字段引用Field(f => f.DanceType)替代了旧版的Infer.Field写法(新版也兼容Infer.Field,两种写法均可)
  • 逻辑上和旧版保持一致:选中多个舞蹈类型时返回匹配任意类型的活动,取消选中则返回对应剩余类型的活动

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 14:03:29