Elasticsearch 查询:匹配嵌套数组中所有元素
可以使用 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中的一个元素,分别匹配Id和Value字段。最后,将所有的Term查询组合成一个Bool查询,作为Nested查询的查询条件。
需要注意的是,由于CarSpecs是一个数组,我们需要使用First()方法来获取数组中的第一个元素,然后再指定要查询的字段。如果不指定First()方法,Elasticsearch 会认为我们要查询CarSpecs数组中的所有元素,而不是其中的一个。
原文地址: https://www.cveoy.top/t/topic/k6s4 著作权归作者所有。请勿转载和采集!