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

Elasticsearch Nested 查询:匹配 Sku.CarSpecs 中的元素

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

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