如何组合必须并且应该在filter eLasticsearch春季启动中的同一字段?

问题描述 投票:0回答:0
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); }

请注意,可能存在一些句法问题。我希望你明白了。

spring-boot elasticsearch spring-data-elasticsearch dynamicquery
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.