可以使用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查询的参数

elastic search 里存在对象如下:Sku CarSpecs SkuCarSpecs里的对象结构是IdValue现在传入参数qq是个Arrayq里面的对象结构是IdValue如下:要求SkuCarSpecs里的每一个元素必须都能在参数q里找到Id和Value相同的元素怎么写查询?使用ElasticAPMNetCoreAll的QueryContainerDescriptor用代码怎

原文地址: https://www.cveoy.top/t/topic/dJul 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录