if (regions != null && !regions.isEmpty()) {
BoolQuery.Builder finalQuery = new BoolQuery.Builder();
for (String regionName : regions) {
finalQuery.must(Query.of(q -> q.nested(n -> n
.path("regions")
.query(Query.of(inner -> inner.match(m -> m
.field("regions.regionName")
.query(regionName)
)))
)));
}
finalQuery.should(Query.of(q -> q.nested(n -> n
.path("regions")
.query(Query.of(inner -> inner.match(m -> m
.field("regions.regionName")
.query("Toute la France")
.boost(4.0f)
)))
)));
finalQuery.minimumShouldMatch("1");
boolQuery.filter(Query.of(q -> q.bool(finalQuery.build())));
}
wo,此查询仅返回匹配所选区域(必须)的配置文件,但它不包含“ toute la la la la la la”的配置文件。
如何修改查询,以与所选区域一起包含“ toute la france”的配置文件?提前感谢您的帮助!
您需要使用两个布尔查询来生成查询:
if (regions != null && !regions.isEmpty()) {
BoolQuery.Builder regionsQuery = new BoolQuery.Builder();
for (String regionName : regions) {
regionsQuery.must(Query.of(q -> q.nested(n -> n
.path("regions")
.query(Query.of(inner -> inner.match(m -> m
.field("regions.regionName")
.query(regionName)
)))
)));
}
BoolQuery.Builder touteLaFranceQuery = new BoolQuery.Builder();
touteLaFranceQuery.must(Query.of(q -> q.nested(n -> n
.path("regions")
.query(Query.of(inner -> inner.match(m -> m
.field("regions.regionName")
.query("Toute la France")
)))
)));
BoolQuery.Builder finalQuery = new BoolQuery.Builder();
finalQuery.should(Query.of(q -> q.bool(regionsQuery.build()))
.should(Query.of(q -> q.bool(touteLaFranceQuery.build()));
finalQuery.minimumShouldMatch(1);
}