可以使用 nested 查询来实现这个需求。具体的查询代码如下:

var searchResponse = client.Search<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(
                        qn => qn
                            .Term(t => t
                                .Field(f => f.CarSpecs.First().Id)
                                .Value(item.Id)
                            ),
                        qn => qn
                            .Term(t => t
                                .Field(f => f.CarSpecs.First().Value)
                                .Value(item.Value)
                            )
                    )))                )
            )
        )
    )
);

上面的代码中,首先使用Nested查询来指定查询路径为CarSpecs。然后,使用Bool查询来组合多个Term查询,每个Term查询对应参数q中的一个元素,分别匹配IdValue字段。最后,将所有的Term查询组合成一个Bool查询,作为Nested查询的查询条件。

需要注意的是,由于CarSpecs是一个数组,我们需要使用First()方法来获取数组中的第一个元素,然后再指定要查询的字段。如果不指定First()方法,Elasticsearch 会认为我们要查询CarSpecs数组中的所有元素,而不是其中的一个。

Elasticsearch 查询:匹配嵌套数组中所有元素

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

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