elastic search 里存在对象如下:Sku CarSpecs SkuCarSpecs里的对象结构是IdValue现在传入参数qq是个Arrayq里面的对象结构是IdValue如下:要求SkuCarSpecs里的每一个元素必须都能在参数q里找到Id和Value相同的元素怎么写查询?使用ElasticAPMNetCoreAll的QueryContainerDescriptor用代码怎
可以使用nested查询来实现。具体的代码如下:
var searchResponse = await _elasticClient.SearchAsync<Sku>(s => s
.Query(q => q
.Nested(n => n
.Path(p => p.CarSpecs)
.Query(nq => nq
.Bool(b => b
.Must(q.Select(item => new QueryContainer(
q => q.Term(t => t
.Field(f => f.CarSpecs.First().Id)
.Value(item.Id)
),
q => q.Term(t => t
.Field(f => f.CarSpecs.First().Value)
.Value(item.Value)
)
)).ToArray())
)
)
)
)
);
其中,使用了nested查询,指定了查询路径为CarSpecs。然后,使用Bool查询,将多个Term查询组合起来,每个Term查询对应一个参数q中的元素,分别查询Id和Value是否匹配。最后,将所有的查询组合起来,使用ToArray()方法转换为数组,作为Bool查询的参数
原文地址: https://www.cveoy.top/t/topic/dJul 著作权归作者所有。请勿转载和采集!