This is an automated email from the ASF dual-hosted git repository. ilgrosso pushed a commit to branch 3_0_X in repository https://gitbox.apache.org/repos/asf/syncope.git
The following commit(s) were added to refs/heads/3_0_X by this push: new 8922d70efe [SYNCOPE-1886] move must to filter to improve query performance (#1087) 8922d70efe is described below commit 8922d70efe386ea7969f4687f6676d8b1c217dbc Author: Andrea Patricelli <andreapatrice...@apache.org> AuthorDate: Fri Jun 6 15:35:58 2025 +0200 [SYNCOPE-1886] move must to filter to improve query performance (#1087) --- .../jpa/dao/ElasticsearchAnySearchDAO.java | 18 ++++----- .../jpa/dao/ElasticsearchAuditConfDAO.java | 2 +- .../persistence/jpa/dao/ElasticsearchRealmDAO.java | 4 +- .../jpa/dao/ElasticsearchAnySearchDAOTest.java | 44 +++++++++++----------- .../jpa/dao/OpenSearchAnySearchDAO.java | 18 ++++----- .../jpa/dao/OpenSearchAuditConfDAO.java | 2 +- .../persistence/jpa/dao/OpenSearchRealmDAO.java | 4 +- .../jpa/dao/OpenSearchAnySearchDAOTest.java | 44 +++++++++++----------- 8 files changed, 68 insertions(+), 68 deletions(-) diff --git a/ext/elasticsearch/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/ElasticsearchAnySearchDAO.java b/ext/elasticsearch/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/ElasticsearchAnySearchDAO.java index 0d7163a1b0..b7136adcfc 100644 --- a/ext/elasticsearch/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/ElasticsearchAnySearchDAO.java +++ b/ext/elasticsearch/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/ElasticsearchAnySearchDAO.java @@ -189,10 +189,10 @@ public class ElasticsearchAnySearchDAO extends AbstractAnySearchDAO { if (!recursive) { query = new Query.Builder().bool( QueryBuilders.bool(). - must(new Query.Builder().term(QueryBuilders.term(). + filter(new Query.Builder().term(QueryBuilders.term(). field("realm").value(base.getKey()).build()). build()). - must(query).build()). + filter(query).build()). build(); } } else { @@ -203,8 +203,8 @@ public class ElasticsearchAnySearchDAO extends AbstractAnySearchDAO { if (filter.getLeft().isPresent()) { query = new Query.Builder().bool( QueryBuilders.bool(). - must(filter.getLeft().get()). - must(query).build()). + filter(filter.getLeft().get()). + filter(query).build()). build(); } } @@ -400,20 +400,20 @@ public class ElasticsearchAnySearchDAO extends AbstractAnySearchDAO { List<Query> andCompound = new ArrayList<>(); Query andLeft = getQuery(cond.getLeft(), kind); - if (andLeft._kind() == Query.Kind.Bool && !((BoolQuery) andLeft._get()).must().isEmpty()) { - andCompound.addAll(((BoolQuery) andLeft._get()).must()); + if (andLeft._kind() == Query.Kind.Bool && !((BoolQuery) andLeft._get()).filter().isEmpty()) { + andCompound.addAll(((BoolQuery) andLeft._get()).filter()); } else { andCompound.add(andLeft); } Query andRight = getQuery(cond.getRight(), kind); - if (andRight._kind() == Query.Kind.Bool && !((BoolQuery) andRight._get()).must().isEmpty()) { - andCompound.addAll(((BoolQuery) andRight._get()).must()); + if (andRight._kind() == Query.Kind.Bool && !((BoolQuery) andRight._get()).filter().isEmpty()) { + andCompound.addAll(((BoolQuery) andRight._get()).filter()); } else { andCompound.add(andRight); } - query = new Query.Builder().bool(QueryBuilders.bool().must(andCompound).build()).build(); + query = new Query.Builder().bool(QueryBuilders.bool().filter(andCompound).build()).build(); break; case OR: diff --git a/ext/elasticsearch/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/ElasticsearchAuditConfDAO.java b/ext/elasticsearch/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/ElasticsearchAuditConfDAO.java index 14fe873f62..73d9f665f5 100644 --- a/ext/elasticsearch/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/ElasticsearchAuditConfDAO.java +++ b/ext/elasticsearch/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/ElasticsearchAuditConfDAO.java @@ -123,7 +123,7 @@ public class ElasticsearchAuditConfDAO extends JPAAuditConfDAO { build()); } - return new Query.Builder().bool(QueryBuilders.bool().must(queries).build()).build(); + return new Query.Builder().bool(QueryBuilders.bool().filter(queries).build()).build(); } @Override diff --git a/ext/elasticsearch/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/ElasticsearchRealmDAO.java b/ext/elasticsearch/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/ElasticsearchRealmDAO.java index 2dc61a0a22..8d65e91471 100644 --- a/ext/elasticsearch/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/ElasticsearchRealmDAO.java +++ b/ext/elasticsearch/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/ElasticsearchRealmDAO.java @@ -162,7 +162,7 @@ public class ElasticsearchRealmDAO extends JPARealmDAO { } } - return new Query.Builder().bool(QueryBuilders.bool().must( + return new Query.Builder().bool(QueryBuilders.bool().filter( prefix, new Query.Builder().regexp(QueryBuilders.regexp(). field("name").value(output.toString()).build()). @@ -237,7 +237,7 @@ public class ElasticsearchRealmDAO extends JPARealmDAO { field("fullPath").value(SyncopeConstants.ROOT_REALM.equals(prefix) ? "/" : prefix + "/"). build()).build()).build()).build(); - Query query = new Query.Builder().bool(QueryBuilders.bool().must( + Query query = new Query.Builder().bool(QueryBuilders.bool().filter( buildDescendantsQuery(Set.of(base), null), prefixQuery).build()). build(); diff --git a/ext/elasticsearch/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/dao/ElasticsearchAnySearchDAOTest.java b/ext/elasticsearch/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/dao/ElasticsearchAnySearchDAOTest.java index 03b77935fe..46dd995f7f 100644 --- a/ext/elasticsearch/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/dao/ElasticsearchAnySearchDAOTest.java +++ b/ext/elasticsearch/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/dao/ElasticsearchAnySearchDAOTest.java @@ -192,8 +192,8 @@ public class ElasticsearchAnySearchDAOTest { assertThat( new Query.Builder().bool(QueryBuilders.bool(). - must(new Query.Builder().exists(QueryBuilders.exists().field("id").build()).build()). - must(new Query.Builder().term(QueryBuilders.term().field("memberships").value("groupKey"). + filter(new Query.Builder().exists(QueryBuilders.exists().field("id").build()).build()). + filter(new Query.Builder().term(QueryBuilders.term().field("memberships").value("groupKey"). build()).build()).build()).build()). usingRecursiveComparison(). isEqualTo(request.query()); @@ -255,20 +255,20 @@ public class ElasticsearchAnySearchDAOTest { SearchCond.getLeaf(cond6))), AnyTypeKind.USER); assertEquals(Query.Kind.Bool, query._kind()); - assertEquals(6, ((BoolQuery) query._get()).must().size()); + assertEquals(6, ((BoolQuery) query._get()).filter().size()); assertThat( new Query.Builder().bool(QueryBuilders.bool(). - must(new Query.Builder().term( + filter(new Query.Builder().term( QueryBuilders.term().field("id").value("1").build()).build()). - must(new Query.Builder().term( + filter(new Query.Builder().term( QueryBuilders.term().field("id").value("2").build()).build()). - must(new Query.Builder().term( + filter(new Query.Builder().term( QueryBuilders.term().field("id").value("3").build()).build()). - must(new Query.Builder().term( + filter(new Query.Builder().term( QueryBuilders.term().field("id").value("4").build()).build()). - must(new Query.Builder().term( + filter(new Query.Builder().term( QueryBuilders.term().field("id").value("5").build()).build()). - must(new Query.Builder().term( + filter(new Query.Builder().term( QueryBuilders.term().field("id").value("6").build()).build()). build()).build()). usingRecursiveComparison().isEqualTo(query); @@ -313,16 +313,16 @@ public class ElasticsearchAnySearchDAOTest { SearchCond.getLeaf(cond6))))), AnyTypeKind.USER); assertEquals(Query.Kind.Bool, query._kind()); - assertEquals(2, ((BoolQuery) query._get()).must().size()); - Query left = ((BoolQuery) query._get()).must().get(0); + assertEquals(2, ((BoolQuery) query._get()).filter().size()); + Query left = ((BoolQuery) query._get()).filter().get(0); assertEquals(Query.Kind.DisMax, left._kind()); assertEquals(3, ((DisMaxQuery) left._get()).queries().size()); - Query right = ((BoolQuery) query._get()).must().get(1); + Query right = ((BoolQuery) query._get()).filter().get(1); assertEquals(Query.Kind.DisMax, right._kind()); assertEquals(3, ((DisMaxQuery) right._get()).queries().size()); assertThat( new Query.Builder().bool(QueryBuilders.bool(). - must(new Query.Builder().disMax(QueryBuilders.disMax(). + filter(new Query.Builder().disMax(QueryBuilders.disMax(). queries(new Query.Builder().term( QueryBuilders.term().field("id").value("1").build()).build()). queries(new Query.Builder().term( @@ -330,7 +330,7 @@ public class ElasticsearchAnySearchDAOTest { queries(new Query.Builder().term( QueryBuilders.term().field("id").value("3").build()).build()).build()). build()). - must(new Query.Builder().disMax(QueryBuilders.disMax(). + filter(new Query.Builder().disMax(QueryBuilders.disMax(). queries(new Query.Builder().term( QueryBuilders.term().field("id").value("4").build()).build()). queries(new Query.Builder().term( @@ -356,26 +356,26 @@ public class ElasticsearchAnySearchDAOTest { assertEquals(2, ((DisMaxQuery) query._get()).queries().size()); left = ((DisMaxQuery) query._get()).queries().get(0); assertEquals(Query.Kind.Bool, left._kind()); - assertEquals(3, ((BoolQuery) left._get()).must().size()); + assertEquals(3, ((BoolQuery) left._get()).filter().size()); right = ((DisMaxQuery) query._get()).queries().get(1); assertEquals(Query.Kind.Bool, right._kind()); - assertEquals(3, ((BoolQuery) right._get()).must().size()); + assertEquals(3, ((BoolQuery) right._get()).filter().size()); assertThat( new Query.Builder().disMax(QueryBuilders.disMax(). queries(new Query.Builder().bool(QueryBuilders.bool(). - must(new Query.Builder().term( + filter(new Query.Builder().term( QueryBuilders.term().field("id").value("1").build()).build()). - must(new Query.Builder().term( + filter(new Query.Builder().term( QueryBuilders.term().field("id").value("2").build()).build()). - must(new Query.Builder().term( + filter(new Query.Builder().term( QueryBuilders.term().field("id").value("3").build()).build()).build()). build()). queries(new Query.Builder().bool(QueryBuilders.bool(). - must(new Query.Builder().term( + filter(new Query.Builder().term( QueryBuilders.term().field("id").value("4").build()).build()). - must(new Query.Builder().term( + filter(new Query.Builder().term( QueryBuilders.term().field("id").value("5").build()).build()). - must(new Query.Builder().term( + filter(new Query.Builder().term( QueryBuilders.term().field("id").value("6").build()).build()).build()). build()). build()).build()). diff --git a/ext/opensearch/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/OpenSearchAnySearchDAO.java b/ext/opensearch/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/OpenSearchAnySearchDAO.java index f24cba1abd..10bc71524c 100644 --- a/ext/opensearch/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/OpenSearchAnySearchDAO.java +++ b/ext/opensearch/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/OpenSearchAnySearchDAO.java @@ -188,10 +188,10 @@ public class OpenSearchAnySearchDAO extends AbstractAnySearchDAO { if (!recursive) { query = new Query.Builder().bool( QueryBuilders.bool(). - must(new Query.Builder().term(QueryBuilders.term(). + filter(new Query.Builder().term(QueryBuilders.term(). field("realm").value(FieldValue.of(base.getKey())).build()). build()). - must(query).build()). + filter(query).build()). build(); } } else { @@ -202,8 +202,8 @@ public class OpenSearchAnySearchDAO extends AbstractAnySearchDAO { if (filter.getLeft().isPresent()) { query = new Query.Builder().bool( QueryBuilders.bool(). - must(filter.getLeft().get()). - must(query).build()). + filter(filter.getLeft().get()). + filter(query).build()). build(); } } @@ -399,20 +399,20 @@ public class OpenSearchAnySearchDAO extends AbstractAnySearchDAO { List<Query> andCompound = new ArrayList<>(); Query andLeft = getQuery(cond.getLeft(), kind); - if (andLeft._kind() == Query.Kind.Bool && !((BoolQuery) andLeft._get()).must().isEmpty()) { - andCompound.addAll(((BoolQuery) andLeft._get()).must()); + if (andLeft._kind() == Query.Kind.Bool && !((BoolQuery) andLeft._get()).filter().isEmpty()) { + andCompound.addAll(((BoolQuery) andLeft._get()).filter()); } else { andCompound.add(andLeft); } Query andRight = getQuery(cond.getRight(), kind); - if (andRight._kind() == Query.Kind.Bool && !((BoolQuery) andRight._get()).must().isEmpty()) { - andCompound.addAll(((BoolQuery) andRight._get()).must()); + if (andRight._kind() == Query.Kind.Bool && !((BoolQuery) andRight._get()).filter().isEmpty()) { + andCompound.addAll(((BoolQuery) andRight._get()).filter()); } else { andCompound.add(andRight); } - query = new Query.Builder().bool(QueryBuilders.bool().must(andCompound).build()).build(); + query = new Query.Builder().bool(QueryBuilders.bool().filter(andCompound).build()).build(); break; case OR: diff --git a/ext/opensearch/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/OpenSearchAuditConfDAO.java b/ext/opensearch/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/OpenSearchAuditConfDAO.java index 45de90b259..a285dcf3d0 100644 --- a/ext/opensearch/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/OpenSearchAuditConfDAO.java +++ b/ext/opensearch/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/OpenSearchAuditConfDAO.java @@ -126,7 +126,7 @@ public class OpenSearchAuditConfDAO extends JPAAuditConfDAO { build()); } - return new Query.Builder().bool(QueryBuilders.bool().must(queries).build()).build(); + return new Query.Builder().bool(QueryBuilders.bool().filter(queries).build()).build(); } @Override diff --git a/ext/opensearch/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/OpenSearchRealmDAO.java b/ext/opensearch/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/OpenSearchRealmDAO.java index 23e0c88f43..140f906ff0 100644 --- a/ext/opensearch/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/OpenSearchRealmDAO.java +++ b/ext/opensearch/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/OpenSearchRealmDAO.java @@ -161,7 +161,7 @@ public class OpenSearchRealmDAO extends JPARealmDAO { } } - return new Query.Builder().bool(QueryBuilders.bool().must( + return new Query.Builder().bool(QueryBuilders.bool().filter( prefix, new Query.Builder().regexp(QueryBuilders.regexp(). field("name").value(output.toString()).build()). @@ -236,7 +236,7 @@ public class OpenSearchRealmDAO extends JPARealmDAO { field("fullPath").value(SyncopeConstants.ROOT_REALM.equals(prefix) ? "/" : prefix + "/"). build()).build()).build()).build(); - Query query = new Query.Builder().bool(QueryBuilders.bool().must( + Query query = new Query.Builder().bool(QueryBuilders.bool().filter( buildDescendantsQuery(Set.of(base), null), prefixQuery).build()). build(); diff --git a/ext/opensearch/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/dao/OpenSearchAnySearchDAOTest.java b/ext/opensearch/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/dao/OpenSearchAnySearchDAOTest.java index 2c5a5a113e..f4c6ef4cab 100644 --- a/ext/opensearch/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/dao/OpenSearchAnySearchDAOTest.java +++ b/ext/opensearch/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/dao/OpenSearchAnySearchDAOTest.java @@ -193,8 +193,8 @@ public class OpenSearchAnySearchDAOTest { assertThat( new Query.Builder().bool(QueryBuilders.bool(). - must(new Query.Builder().exists(QueryBuilders.exists().field("id").build()).build()). - must(new Query.Builder().term(QueryBuilders.term().field("memberships"). + filter(new Query.Builder().exists(QueryBuilders.exists().field("id").build()).build()). + filter(new Query.Builder().term(QueryBuilders.term().field("memberships"). value(FieldValue.of("groupKey")).build()).build()).build()).build()). usingRecursiveComparison(). isEqualTo(request.query()); @@ -256,20 +256,20 @@ public class OpenSearchAnySearchDAOTest { SearchCond.getLeaf(cond6))), AnyTypeKind.USER); assertEquals(Query.Kind.Bool, query._kind()); - assertEquals(6, ((BoolQuery) query._get()).must().size()); + assertEquals(6, ((BoolQuery) query._get()).filter().size()); assertThat( new Query.Builder().bool(QueryBuilders.bool(). - must(new Query.Builder().term( + filter(new Query.Builder().term( QueryBuilders.term().field("id").value(FieldValue.of("1")).build()).build()). - must(new Query.Builder().term( + filter(new Query.Builder().term( QueryBuilders.term().field("id").value(FieldValue.of("2")).build()).build()). - must(new Query.Builder().term( + filter(new Query.Builder().term( QueryBuilders.term().field("id").value(FieldValue.of("3")).build()).build()). - must(new Query.Builder().term( + filter(new Query.Builder().term( QueryBuilders.term().field("id").value(FieldValue.of("4")).build()).build()). - must(new Query.Builder().term( + filter(new Query.Builder().term( QueryBuilders.term().field("id").value(FieldValue.of("5")).build()).build()). - must(new Query.Builder().term( + filter(new Query.Builder().term( QueryBuilders.term().field("id").value(FieldValue.of("6")).build()).build()). build()).build()). usingRecursiveComparison().isEqualTo(query); @@ -314,16 +314,16 @@ public class OpenSearchAnySearchDAOTest { SearchCond.getLeaf(cond6))))), AnyTypeKind.USER); assertEquals(Query.Kind.Bool, query._kind()); - assertEquals(2, ((BoolQuery) query._get()).must().size()); - Query left = ((BoolQuery) query._get()).must().get(0); + assertEquals(2, ((BoolQuery) query._get()).filter().size()); + Query left = ((BoolQuery) query._get()).filter().get(0); assertEquals(Query.Kind.DisMax, left._kind()); assertEquals(3, ((DisMaxQuery) left._get()).queries().size()); - Query right = ((BoolQuery) query._get()).must().get(1); + Query right = ((BoolQuery) query._get()).filter().get(1); assertEquals(Query.Kind.DisMax, right._kind()); assertEquals(3, ((DisMaxQuery) right._get()).queries().size()); assertThat( new Query.Builder().bool(QueryBuilders.bool(). - must(new Query.Builder().disMax(QueryBuilders.disMax(). + filter(new Query.Builder().disMax(QueryBuilders.disMax(). queries(new Query.Builder().term( QueryBuilders.term().field("id"). value(FieldValue.of("1")).build()).build()). @@ -334,7 +334,7 @@ public class OpenSearchAnySearchDAOTest { QueryBuilders.term().field("id"). value(FieldValue.of("3")).build()).build()).build()). build()). - must(new Query.Builder().disMax(QueryBuilders.disMax(). + filter(new Query.Builder().disMax(QueryBuilders.disMax(). queries(new Query.Builder().term( QueryBuilders.term().field("id"). value(FieldValue.of("4")).build()).build()). @@ -363,31 +363,31 @@ public class OpenSearchAnySearchDAOTest { assertEquals(2, ((DisMaxQuery) query._get()).queries().size()); left = ((DisMaxQuery) query._get()).queries().get(0); assertEquals(Query.Kind.Bool, left._kind()); - assertEquals(3, ((BoolQuery) left._get()).must().size()); + assertEquals(3, ((BoolQuery) left._get()).filter().size()); right = ((DisMaxQuery) query._get()).queries().get(1); assertEquals(Query.Kind.Bool, right._kind()); - assertEquals(3, ((BoolQuery) right._get()).must().size()); + assertEquals(3, ((BoolQuery) right._get()).filter().size()); assertThat( new Query.Builder().disMax(QueryBuilders.disMax(). queries(new Query.Builder().bool(QueryBuilders.bool(). - must(new Query.Builder().term( + filter(new Query.Builder().term( QueryBuilders.term().field("id"). value(FieldValue.of("1")).build()).build()). - must(new Query.Builder().term( + filter(new Query.Builder().term( QueryBuilders.term().field("id"). value(FieldValue.of("2")).build()).build()). - must(new Query.Builder().term( + filter(new Query.Builder().term( QueryBuilders.term().field("id"). value(FieldValue.of("3")).build()).build()).build()). build()). queries(new Query.Builder().bool(QueryBuilders.bool(). - must(new Query.Builder().term( + filter(new Query.Builder().term( QueryBuilders.term().field("id"). value(FieldValue.of("4")).build()).build()). - must(new Query.Builder().term( + filter(new Query.Builder().term( QueryBuilders.term().field("id"). value(FieldValue.of("5")).build()).build()). - must(new Query.Builder().term( + filter(new Query.Builder().term( QueryBuilders.term().field("id"). value(FieldValue.of("6")).build()).build()).build()). build()).