This is an automated email from the ASF dual-hosted git repository.
ilgrosso pushed a commit to branch 4_0_X
in repository https://gitbox.apache.org/repos/asf/syncope.git
The following commit(s) were added to refs/heads/4_0_X by this push:
new 361b8c0bef [SYNCOPE-1886] move must to filter to improve query
performance (#1087) (#1101)
361b8c0bef is described below
commit 361b8c0beff86e9f81e91fffe176a71faf05442c
Author: Andrea Patricelli <[email protected]>
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 21e88c9eed..243b3ab716 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
@@ -169,7 +169,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()).
@@ -235,7 +235,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()).