This is an automated email from the ASF dual-hosted git repository. ilgrosso pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/syncope.git
The following commit(s) were added to refs/heads/master by this push: new 5e15950fa0 [SYNCOPE-1886] move must to filter to improve query performance (#1087) (#1101) 5e15950fa0 is described below commit 5e15950fa05a69f4058cca397478b9919f0316e1 Author: Andrea Patricelli <andreapatrice...@apache.org> AuthorDate: Sat Jun 7 06:48:10 2025 +0200 [SYNCOPE-1886] move must to filter to improve query performance (#1087) (#1101) --- .../dao/ElasticsearchAnySearchDAO.java | 18 ++++----- .../dao/ElasticsearchAuditEventDAO.java | 2 +- .../dao/ElasticsearchRealmSearchDAO.java | 4 +- .../dao/ElasticsearchAnySearchDAOTest.java | 44 +++++++++++----------- .../opensearch/dao/OpenSearchAnySearchDAO.java | 18 ++++----- .../opensearch/dao/OpenSearchAuditEventDAO.java | 2 +- .../opensearch/dao/OpenSearchRealmSearchDAO.java | 4 +- .../opensearch/dao/OpenSearchAnySearchDAOTest.java | 44 +++++++++++----------- 8 files changed, 68 insertions(+), 68 deletions(-) diff --git a/ext/elasticsearch/persistence/src/main/java/org/apache/syncope/core/persistence/elasticsearch/dao/ElasticsearchAnySearchDAO.java b/ext/elasticsearch/persistence/src/main/java/org/apache/syncope/core/persistence/elasticsearch/dao/ElasticsearchAnySearchDAO.java index fcab70e184..c1cb6a9e42 100644 --- a/ext/elasticsearch/persistence/src/main/java/org/apache/syncope/core/persistence/elasticsearch/dao/ElasticsearchAnySearchDAO.java +++ b/ext/elasticsearch/persistence/src/main/java/org/apache/syncope/core/persistence/elasticsearch/dao/ElasticsearchAnySearchDAO.java @@ -184,10 +184,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 { @@ -198,8 +198,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(); } } @@ -381,20 +381,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/src/main/java/org/apache/syncope/core/persistence/elasticsearch/dao/ElasticsearchAuditEventDAO.java b/ext/elasticsearch/persistence/src/main/java/org/apache/syncope/core/persistence/elasticsearch/dao/ElasticsearchAuditEventDAO.java index 43404adceb..e7c3c5f7f9 100644 --- a/ext/elasticsearch/persistence/src/main/java/org/apache/syncope/core/persistence/elasticsearch/dao/ElasticsearchAuditEventDAO.java +++ b/ext/elasticsearch/persistence/src/main/java/org/apache/syncope/core/persistence/elasticsearch/dao/ElasticsearchAuditEventDAO.java @@ -124,7 +124,7 @@ public class ElasticsearchAuditEventDAO implements AuditEventDAO { 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/src/main/java/org/apache/syncope/core/persistence/elasticsearch/dao/ElasticsearchRealmSearchDAO.java b/ext/elasticsearch/persistence/src/main/java/org/apache/syncope/core/persistence/elasticsearch/dao/ElasticsearchRealmSearchDAO.java index 53936c2d8c..59fb30b7fe 100644 --- a/ext/elasticsearch/persistence/src/main/java/org/apache/syncope/core/persistence/elasticsearch/dao/ElasticsearchRealmSearchDAO.java +++ b/ext/elasticsearch/persistence/src/main/java/org/apache/syncope/core/persistence/elasticsearch/dao/ElasticsearchRealmSearchDAO.java @@ -172,7 +172,7 @@ public class ElasticsearchRealmSearchDAO implements RealmSearchDAO { } } - 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()). @@ -238,7 +238,7 @@ public class ElasticsearchRealmSearchDAO implements RealmSearchDAO { 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), (String) null), prefixQuery).build()). build(); diff --git a/ext/elasticsearch/persistence/src/test/java/org/apache/syncope/core/persistence/elasticsearch/dao/ElasticsearchAnySearchDAOTest.java b/ext/elasticsearch/persistence/src/test/java/org/apache/syncope/core/persistence/elasticsearch/dao/ElasticsearchAnySearchDAOTest.java index 31a27d73bd..16bf74f0b2 100644 --- a/ext/elasticsearch/persistence/src/test/java/org/apache/syncope/core/persistence/elasticsearch/dao/ElasticsearchAnySearchDAOTest.java +++ b/ext/elasticsearch/persistence/src/test/java/org/apache/syncope/core/persistence/elasticsearch/dao/ElasticsearchAnySearchDAOTest.java @@ -195,8 +195,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()); @@ -256,20 +256,20 @@ public class ElasticsearchAnySearchDAOTest { SearchCond.of(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); @@ -312,16 +312,16 @@ public class ElasticsearchAnySearchDAOTest { SearchCond.of(cond6))), AnyTypeKind.USER); assertEquals(Query.Kind.Bool, query._kind()); - assertEquals(2, ((BoolQuery) query._get()).must().size()); - Query left = ((BoolQuery) query._get()).must().getFirst(); + assertEquals(2, ((BoolQuery) query._get()).filter().size()); + Query left = ((BoolQuery) query._get()).filter().getFirst(); 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( @@ -329,7 +329,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( @@ -354,26 +354,26 @@ public class ElasticsearchAnySearchDAOTest { assertEquals(2, ((DisMaxQuery) query._get()).queries().size()); left = ((DisMaxQuery) query._get()).queries().getFirst(); 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/src/main/java/org/apache/syncope/core/persistence/opensearch/dao/OpenSearchAnySearchDAO.java b/ext/opensearch/persistence/src/main/java/org/apache/syncope/core/persistence/opensearch/dao/OpenSearchAnySearchDAO.java index 1494012613..5dfbdf9448 100644 --- a/ext/opensearch/persistence/src/main/java/org/apache/syncope/core/persistence/opensearch/dao/OpenSearchAnySearchDAO.java +++ b/ext/opensearch/persistence/src/main/java/org/apache/syncope/core/persistence/opensearch/dao/OpenSearchAnySearchDAO.java @@ -183,10 +183,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 { @@ -197,8 +197,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(); } } @@ -379,20 +379,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/src/main/java/org/apache/syncope/core/persistence/opensearch/dao/OpenSearchAuditEventDAO.java b/ext/opensearch/persistence/src/main/java/org/apache/syncope/core/persistence/opensearch/dao/OpenSearchAuditEventDAO.java index 35cc7f749a..f7021a5507 100644 --- a/ext/opensearch/persistence/src/main/java/org/apache/syncope/core/persistence/opensearch/dao/OpenSearchAuditEventDAO.java +++ b/ext/opensearch/persistence/src/main/java/org/apache/syncope/core/persistence/opensearch/dao/OpenSearchAuditEventDAO.java @@ -123,7 +123,7 @@ public class OpenSearchAuditEventDAO implements AuditEventDAO { 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/src/main/java/org/apache/syncope/core/persistence/opensearch/dao/OpenSearchRealmSearchDAO.java b/ext/opensearch/persistence/src/main/java/org/apache/syncope/core/persistence/opensearch/dao/OpenSearchRealmSearchDAO.java index 5fa88bf2d7..46d8f4cc6c 100644 --- a/ext/opensearch/persistence/src/main/java/org/apache/syncope/core/persistence/opensearch/dao/OpenSearchRealmSearchDAO.java +++ b/ext/opensearch/persistence/src/main/java/org/apache/syncope/core/persistence/opensearch/dao/OpenSearchRealmSearchDAO.java @@ -172,7 +172,7 @@ public class OpenSearchRealmSearchDAO implements RealmSearchDAO { } } - 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()). @@ -238,7 +238,7 @@ public class OpenSearchRealmSearchDAO implements RealmSearchDAO { 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), (String) null), prefixQuery).build()). build(); diff --git a/ext/opensearch/persistence/src/test/java/org/apache/syncope/core/persistence/opensearch/dao/OpenSearchAnySearchDAOTest.java b/ext/opensearch/persistence/src/test/java/org/apache/syncope/core/persistence/opensearch/dao/OpenSearchAnySearchDAOTest.java index 7b9fadb4bb..740083b6bf 100644 --- a/ext/opensearch/persistence/src/test/java/org/apache/syncope/core/persistence/opensearch/dao/OpenSearchAnySearchDAOTest.java +++ b/ext/opensearch/persistence/src/test/java/org/apache/syncope/core/persistence/opensearch/dao/OpenSearchAnySearchDAOTest.java @@ -196,8 +196,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()); @@ -257,20 +257,20 @@ public class OpenSearchAnySearchDAOTest { SearchCond.of(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); @@ -313,16 +313,16 @@ public class OpenSearchAnySearchDAOTest { SearchCond.of(cond6))), AnyTypeKind.USER); assertEquals(Query.Kind.Bool, query._kind()); - assertEquals(2, ((BoolQuery) query._get()).must().size()); - Query left = ((BoolQuery) query._get()).must().getFirst(); + assertEquals(2, ((BoolQuery) query._get()).filter().size()); + Query left = ((BoolQuery) query._get()).filter().getFirst(); 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()). @@ -333,7 +333,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()). @@ -361,31 +361,31 @@ public class OpenSearchAnySearchDAOTest { assertEquals(2, ((DisMaxQuery) query._get()).queries().size()); left = ((DisMaxQuery) query._get()).queries().getFirst(); 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()).