.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
相关产品推荐
相关产品推荐

