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 ff01074199 Elasticsearch and OpenSearch: avoid duplicating id property
ff01074199 is described below
commit ff01074199c5da170f4c4ccd6bdf0859ef8bf77a
Author: Francesco Chicchiriccò <[email protected]>
AuthorDate: Wed Jul 16 13:48:37 2025 +0200
Elasticsearch and OpenSearch: avoid duplicating id property
---
.../client/ElasticsearchIndexManager.java | 2 -
.../elasticsearch/client/ElasticsearchUtils.java | 2 -
.../dao/ElasticsearchAnySearchDAO.java | 19 +++++++-
.../dao/ElasticsearchRealmSearchDAO.java | 5 +++
.../dao/ElasticsearchAnySearchDAOTest.java | 50 +++++++++++-----------
.../opensearch/client/OpenSearchIndexManager.java | 2 -
.../ext/opensearch/client/OpenSearchUtils.java | 2 -
.../opensearch/dao/OpenSearchAnySearchDAO.java | 19 +++++++-
.../opensearch/dao/OpenSearchRealmSearchDAO.java | 5 +++
.../opensearch/dao/OpenSearchAnySearchDAOTest.java | 50 +++++++++++-----------
.../org/apache/syncope/fit/core/SearchITCase.java | 15 +++++--
pom.xml | 2 +-
12 files changed, 106 insertions(+), 67 deletions(-)
diff --git
a/ext/elasticsearch/client-elasticsearch/src/main/java/org/apache/syncope/ext/elasticsearch/client/ElasticsearchIndexManager.java
b/ext/elasticsearch/client-elasticsearch/src/main/java/org/apache/syncope/ext/elasticsearch/client/ElasticsearchIndexManager.java
index 9df9e33c93..df7c8c8f7b 100644
---
a/ext/elasticsearch/client-elasticsearch/src/main/java/org/apache/syncope/ext/elasticsearch/client/ElasticsearchIndexManager.java
+++
b/ext/elasticsearch/client-elasticsearch/src/main/java/org/apache/syncope/ext/elasticsearch/client/ElasticsearchIndexManager.java
@@ -49,7 +49,6 @@ import
org.apache.syncope.core.persistence.api.entity.AuditEvent;
import org.apache.syncope.core.persistence.api.entity.Entity;
import org.apache.syncope.core.persistence.api.entity.Realm;
import org.apache.syncope.core.provisioning.api.event.EntityLifecycleEvent;
-import org.apache.syncope.core.spring.security.SecureRandomUtils;
import org.identityconnectors.framework.common.objects.SyncDeltaType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -342,7 +341,6 @@ public class ElasticsearchIndexManager {
IndexRequest<Map<String, Object>> request = new
IndexRequest.Builder<Map<String, Object>>().
index(ElasticsearchUtils.getAuditIndex(domain)).
- id(SecureRandomUtils.generateRandomUUID().toString()).
document(elasticsearchUtils.document(auditEvent)).
build();
IndexResponse response = client.index(request);
diff --git
a/ext/elasticsearch/client-elasticsearch/src/main/java/org/apache/syncope/ext/elasticsearch/client/ElasticsearchUtils.java
b/ext/elasticsearch/client-elasticsearch/src/main/java/org/apache/syncope/ext/elasticsearch/client/ElasticsearchUtils.java
index 1f887cd7c8..68ad03f96e 100644
---
a/ext/elasticsearch/client-elasticsearch/src/main/java/org/apache/syncope/ext/elasticsearch/client/ElasticsearchUtils.java
+++
b/ext/elasticsearch/client-elasticsearch/src/main/java/org/apache/syncope/ext/elasticsearch/client/ElasticsearchUtils.java
@@ -116,7 +116,6 @@ public class ElasticsearchUtils {
@Transactional
public Map<String, Object> document(final Any any) {
Map<String, Object> builder = new HashMap<>();
- builder.put("id", any.getKey());
builder.put("realm", any.getRealm().getKey());
builder.put("anyType", any.getType().getKey());
builder.put("creationDate", any.getCreationDate());
@@ -229,7 +228,6 @@ public class ElasticsearchUtils {
public Map<String, Object> document(final Realm realm) {
Map<String, Object> builder = new HashMap<>();
- builder.put("id", realm.getKey());
builder.put("name", realm.getName());
builder.put("parent_id", realm.getParent() == null ? null :
realm.getParent().getKey());
builder.put("fullPath", realm.getFullPath());
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 697e7a59db..2998833c1e 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
@@ -237,8 +237,8 @@ public class ElasticsearchAnySearchDAO extends
AbstractAnySearchDAO {
orderBy.forEach(clause -> {
String sortName = null;
- // Manage difference among external key attribute and internal JPA
@Id
- String fieldName = "key".equals(clause.getProperty()) ? "id" :
clause.getProperty();
+ // Manage difference between external key attribute and internal
_id
+ String fieldName = "key".equals(clause.getProperty()) ? "_id" :
clause.getProperty();
Field anyField = anyUtils.getField(fieldName).orElse(null);
if (anyField == null) {
@@ -602,6 +602,21 @@ public class ElasticsearchAnySearchDAO extends
AbstractAnySearchDAO {
return fillAttrQuery(checked.getLeft(), checked.getRight(), cond);
}
+ @Override
+ protected Triple<PlainSchema, PlainAttrValue, AnyCond> check(final AnyCond
cond, final AnyTypeKind kind) {
+ Triple<PlainSchema, PlainAttrValue, AnyCond> checked =
super.check(cond, kind);
+
+ // Manage difference between external id attribute and internal _id
+ if ("id".equals(checked.getRight().getSchema())) {
+ checked.getRight().setSchema("_id");
+ }
+ if ("id".equals(checked.getLeft().getKey())) {
+ checked.getLeft().setKey("_id");
+ }
+
+ return checked;
+ }
+
protected Query getQuery(final AnyCond cond, final AnyTypeKind kind) {
if (JAXRSService.PARAM_REALM.equals(cond.getSchema()) &&
cond.getExpression().startsWith("/")) {
Realm realm = realmSearchDAO.findByFullPath(cond.getExpression()).
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 59fb30b7fe..b71124383a 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
@@ -30,6 +30,7 @@ import
co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders;
import co.elastic.clients.elasticsearch.core.CountRequest;
import co.elastic.clients.elasticsearch.core.SearchRequest;
import co.elastic.clients.elasticsearch.core.search.Hit;
+import co.elastic.clients.elasticsearch.core.search.SourceConfig;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
@@ -93,6 +94,7 @@ public class ElasticsearchRealmSearchDAO implements
RealmSearchDAO {
query(new Query.Builder().term(QueryBuilders.term().
field("fullPath").value(fullPath).build()).build()).
size(1).
+ fields(List.of()).source(new
SourceConfig.Builder().fetch(false).build()).
build();
try {
@@ -113,6 +115,7 @@ public class ElasticsearchRealmSearchDAO implements
RealmSearchDAO {
searchType(SearchType.QueryThenFetch).
query(query).
sort(REALM_SORT_OPTIONS).
+ fields(List.of()).source(new
SourceConfig.Builder().fetch(false).build()).
build();
try {
@@ -214,6 +217,7 @@ public class ElasticsearchRealmSearchDAO implements
RealmSearchDAO {
from(pageable.isUnpaged() ? 0 : pageable.getPageSize() *
pageable.getPageNumber()).
size(pageable.isUnpaged() ? indexMaxResultWindow :
pageable.getPageSize()).
sort(REALM_SORT_OPTIONS).
+ fields(List.of()).source(new
SourceConfig.Builder().fetch(false).build()).
build();
List<String> result = List.of();
@@ -249,6 +253,7 @@ public class ElasticsearchRealmSearchDAO implements
RealmSearchDAO {
from(0).
size(indexMaxResultWindow).
sort(REALM_SORT_OPTIONS).
+ fields(List.of()).source(new
SourceConfig.Builder().fetch(false).build()).
build();
List<String> result = List.of();
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 16bf74f0b2..15b985a0a2 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,7 +195,7 @@ public class ElasticsearchAnySearchDAOTest {
assertThat(
new Query.Builder().bool(QueryBuilders.bool().
- filter(new
Query.Builder().exists(QueryBuilders.exists().field("id").build()).build()).
+ 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().
@@ -260,17 +260,17 @@ public class ElasticsearchAnySearchDAOTest {
assertThat(
new Query.Builder().bool(QueryBuilders.bool().
filter(new Query.Builder().term(
-
QueryBuilders.term().field("id").value("1").build()).build()).
+
QueryBuilders.term().field("_id").value("1").build()).build()).
filter(new Query.Builder().term(
-
QueryBuilders.term().field("id").value("2").build()).build()).
+
QueryBuilders.term().field("_id").value("2").build()).build()).
filter(new Query.Builder().term(
-
QueryBuilders.term().field("id").value("3").build()).build()).
+
QueryBuilders.term().field("_id").value("3").build()).build()).
filter(new Query.Builder().term(
-
QueryBuilders.term().field("id").value("4").build()).build()).
+
QueryBuilders.term().field("_id").value("4").build()).build()).
filter(new Query.Builder().term(
-
QueryBuilders.term().field("id").value("5").build()).build()).
+
QueryBuilders.term().field("_id").value("5").build()).build()).
filter(new Query.Builder().term(
-
QueryBuilders.term().field("id").value("6").build()).build()).
+
QueryBuilders.term().field("_id").value("6").build()).build()).
build()).build()).
usingRecursiveComparison().isEqualTo(query);
@@ -287,17 +287,17 @@ public class ElasticsearchAnySearchDAOTest {
assertThat(
new Query.Builder().disMax(QueryBuilders.disMax().
queries(new Query.Builder().term(
-
QueryBuilders.term().field("id").value("1").build()).build()).
+
QueryBuilders.term().field("_id").value("1").build()).build()).
queries(new Query.Builder().term(
-
QueryBuilders.term().field("id").value("2").build()).build()).
+
QueryBuilders.term().field("_id").value("2").build()).build()).
queries(new Query.Builder().term(
-
QueryBuilders.term().field("id").value("3").build()).build()).
+
QueryBuilders.term().field("_id").value("3").build()).build()).
queries(new Query.Builder().term(
-
QueryBuilders.term().field("id").value("4").build()).build()).
+
QueryBuilders.term().field("_id").value("4").build()).build()).
queries(new Query.Builder().term(
-
QueryBuilders.term().field("id").value("5").build()).build()).
+
QueryBuilders.term().field("_id").value("5").build()).build()).
queries(new Query.Builder().term(
-
QueryBuilders.term().field("id").value("6").build()).build()).
+
QueryBuilders.term().field("_id").value("6").build()).build()).
build()).build()).
usingRecursiveComparison().isEqualTo(query);
@@ -323,19 +323,19 @@ public class ElasticsearchAnySearchDAOTest {
new Query.Builder().bool(QueryBuilders.bool().
filter(new
Query.Builder().disMax(QueryBuilders.disMax().
queries(new Query.Builder().term(
-
QueryBuilders.term().field("id").value("1").build()).build()).
+
QueryBuilders.term().field("_id").value("1").build()).build()).
queries(new Query.Builder().term(
-
QueryBuilders.term().field("id").value("2").build()).build()).
+
QueryBuilders.term().field("_id").value("2").build()).build()).
queries(new Query.Builder().term(
-
QueryBuilders.term().field("id").value("3").build()).build()).build()).
+
QueryBuilders.term().field("_id").value("3").build()).build()).build()).
build()).
filter(new
Query.Builder().disMax(QueryBuilders.disMax().
queries(new Query.Builder().term(
-
QueryBuilders.term().field("id").value("4").build()).build()).
+
QueryBuilders.term().field("_id").value("4").build()).build()).
queries(new Query.Builder().term(
-
QueryBuilders.term().field("id").value("5").build()).build()).
+
QueryBuilders.term().field("_id").value("5").build()).build()).
queries(new Query.Builder().term(
-
QueryBuilders.term().field("id").value("6").build()).build()).build()).
+
QueryBuilders.term().field("_id").value("6").build()).build()).build()).
build()).
build()).build()).
usingRecursiveComparison().isEqualTo(query);
@@ -362,19 +362,19 @@ public class ElasticsearchAnySearchDAOTest {
new Query.Builder().disMax(QueryBuilders.disMax().
queries(new
Query.Builder().bool(QueryBuilders.bool().
filter(new Query.Builder().term(
-
QueryBuilders.term().field("id").value("1").build()).build()).
+
QueryBuilders.term().field("_id").value("1").build()).build()).
filter(new Query.Builder().term(
-
QueryBuilders.term().field("id").value("2").build()).build()).
+
QueryBuilders.term().field("_id").value("2").build()).build()).
filter(new Query.Builder().term(
-
QueryBuilders.term().field("id").value("3").build()).build()).build()).
+
QueryBuilders.term().field("_id").value("3").build()).build()).build()).
build()).
queries(new
Query.Builder().bool(QueryBuilders.bool().
filter(new Query.Builder().term(
-
QueryBuilders.term().field("id").value("4").build()).build()).
+
QueryBuilders.term().field("_id").value("4").build()).build()).
filter(new Query.Builder().term(
-
QueryBuilders.term().field("id").value("5").build()).build()).
+
QueryBuilders.term().field("_id").value("5").build()).build()).
filter(new Query.Builder().term(
-
QueryBuilders.term().field("id").value("6").build()).build()).build()).
+
QueryBuilders.term().field("_id").value("6").build()).build()).build()).
build()).
build()).build()).
usingRecursiveComparison().isEqualTo(query);
diff --git
a/ext/opensearch/client-opensearch/src/main/java/org/apache/syncope/ext/opensearch/client/OpenSearchIndexManager.java
b/ext/opensearch/client-opensearch/src/main/java/org/apache/syncope/ext/opensearch/client/OpenSearchIndexManager.java
index d499b5c297..99aae23a4e 100644
---
a/ext/opensearch/client-opensearch/src/main/java/org/apache/syncope/ext/opensearch/client/OpenSearchIndexManager.java
+++
b/ext/opensearch/client-opensearch/src/main/java/org/apache/syncope/ext/opensearch/client/OpenSearchIndexManager.java
@@ -27,7 +27,6 @@ import
org.apache.syncope.core.persistence.api.entity.AuditEvent;
import org.apache.syncope.core.persistence.api.entity.Entity;
import org.apache.syncope.core.persistence.api.entity.Realm;
import org.apache.syncope.core.provisioning.api.event.EntityLifecycleEvent;
-import org.apache.syncope.core.spring.security.SecureRandomUtils;
import org.identityconnectors.framework.common.objects.SyncDeltaType;
import org.opensearch.client.opensearch.OpenSearchClient;
import org.opensearch.client.opensearch._types.OpenSearchException;
@@ -341,7 +340,6 @@ public class OpenSearchIndexManager {
IndexRequest<Map<String, Object>> request = new
IndexRequest.Builder<Map<String, Object>>().
index(OpenSearchUtils.getAuditIndex(domain)).
- id(SecureRandomUtils.generateRandomUUID().toString()).
document(openSearchUtils.document(auditEvent)).
build();
IndexResponse response = client.index(request);
diff --git
a/ext/opensearch/client-opensearch/src/main/java/org/apache/syncope/ext/opensearch/client/OpenSearchUtils.java
b/ext/opensearch/client-opensearch/src/main/java/org/apache/syncope/ext/opensearch/client/OpenSearchUtils.java
index b94ee902dc..28f2f65eb8 100644
---
a/ext/opensearch/client-opensearch/src/main/java/org/apache/syncope/ext/opensearch/client/OpenSearchUtils.java
+++
b/ext/opensearch/client-opensearch/src/main/java/org/apache/syncope/ext/opensearch/client/OpenSearchUtils.java
@@ -116,7 +116,6 @@ public class OpenSearchUtils {
@Transactional
public Map<String, Object> document(final Any any) {
Map<String, Object> builder = new HashMap<>();
- builder.put("id", any.getKey());
builder.put("realm", any.getRealm().getKey());
builder.put("anyType", any.getType().getKey());
builder.put("creationDate", any.getCreationDate());
@@ -229,7 +228,6 @@ public class OpenSearchUtils {
public Map<String, Object> document(final Realm realm) {
Map<String, Object> builder = new HashMap<>();
- builder.put("id", realm.getKey());
builder.put("name", realm.getName());
builder.put("parent_id", realm.getParent() == null ? null :
realm.getParent().getKey());
builder.put("fullPath", realm.getFullPath());
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 53712910bb..15216979d2 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
@@ -236,8 +236,8 @@ public class OpenSearchAnySearchDAO extends
AbstractAnySearchDAO {
orderBy.forEach(clause -> {
String sortName = null;
- // Manage difference among external key attribute and internal JPA
@Id
- String fieldName = "key".equals(clause.getProperty()) ? "id" :
clause.getProperty();
+ // Manage difference between external key attribute and internal
_id
+ String fieldName = "key".equals(clause.getProperty()) ? "_id" :
clause.getProperty();
Field anyField = anyUtils.getField(fieldName).orElse(null);
if (anyField == null) {
@@ -596,6 +596,21 @@ public class OpenSearchAnySearchDAO extends
AbstractAnySearchDAO {
return fillAttrQuery(checked.getLeft(), checked.getRight(), cond);
}
+ @Override
+ protected Triple<PlainSchema, PlainAttrValue, AnyCond> check(final AnyCond
cond, final AnyTypeKind kind) {
+ Triple<PlainSchema, PlainAttrValue, AnyCond> checked =
super.check(cond, kind);
+
+ // Manage difference between external id attribute and internal _id
+ if ("id".equals(checked.getRight().getSchema())) {
+ checked.getRight().setSchema("_id");
+ }
+ if ("id".equals(checked.getLeft().getKey())) {
+ checked.getLeft().setKey("_id");
+ }
+
+ return checked;
+ }
+
protected Query getQuery(final AnyCond cond, final AnyTypeKind kind) {
if (JAXRSService.PARAM_REALM.equals(cond.getSchema()) &&
cond.getExpression().startsWith("/")) {
Realm realm = realmSearchDAO.findByFullPath(cond.getExpression()).
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 46d8f4cc6c..942e8a9fcd 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
@@ -43,6 +43,7 @@ import
org.opensearch.client.opensearch._types.query_dsl.QueryBuilders;
import org.opensearch.client.opensearch.core.CountRequest;
import org.opensearch.client.opensearch.core.SearchRequest;
import org.opensearch.client.opensearch.core.search.Hit;
+import org.opensearch.client.opensearch.core.search.SourceConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.data.domain.Pageable;
@@ -94,6 +95,7 @@ public class OpenSearchRealmSearchDAO implements
RealmSearchDAO {
query(new Query.Builder().term(QueryBuilders.term().
field("fullPath").value(FieldValue.of(fullPath)).build()).build()).
size(1).
+ fields(List.of()).source(new
SourceConfig.Builder().fetch(false).build()).
build();
try {
@@ -114,6 +116,7 @@ public class OpenSearchRealmSearchDAO implements
RealmSearchDAO {
searchType(SearchType.QueryThenFetch).
query(query).
sort(REALM_SORT_OPTIONS).
+ fields(List.of()).source(new
SourceConfig.Builder().fetch(false).build()).
build();
try {
@@ -214,6 +217,7 @@ public class OpenSearchRealmSearchDAO implements
RealmSearchDAO {
from(pageable.isUnpaged() ? 0 : pageable.getPageSize() *
pageable.getPageNumber()).
size(pageable.isUnpaged() ? indexMaxResultWindow :
pageable.getPageSize()).
sort(REALM_SORT_OPTIONS).
+ fields(List.of()).source(new
SourceConfig.Builder().fetch(false).build()).
build();
List<String> result = List.of();
@@ -249,6 +253,7 @@ public class OpenSearchRealmSearchDAO implements
RealmSearchDAO {
from(0).
size(indexMaxResultWindow).
sort(REALM_SORT_OPTIONS).
+ fields(List.of()).source(new
SourceConfig.Builder().fetch(false).build()).
build();
List<String> result = List.of();
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 740083b6bf..c8b9c6935c 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,7 +196,7 @@ public class OpenSearchAnySearchDAOTest {
assertThat(
new Query.Builder().bool(QueryBuilders.bool().
- filter(new
Query.Builder().exists(QueryBuilders.exists().field("id").build()).build()).
+ 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().
@@ -261,17 +261,17 @@ public class OpenSearchAnySearchDAOTest {
assertThat(
new Query.Builder().bool(QueryBuilders.bool().
filter(new Query.Builder().term(
-
QueryBuilders.term().field("id").value(FieldValue.of("1")).build()).build()).
+
QueryBuilders.term().field("_id").value(FieldValue.of("1")).build()).build()).
filter(new Query.Builder().term(
-
QueryBuilders.term().field("id").value(FieldValue.of("2")).build()).build()).
+
QueryBuilders.term().field("_id").value(FieldValue.of("2")).build()).build()).
filter(new Query.Builder().term(
-
QueryBuilders.term().field("id").value(FieldValue.of("3")).build()).build()).
+
QueryBuilders.term().field("_id").value(FieldValue.of("3")).build()).build()).
filter(new Query.Builder().term(
-
QueryBuilders.term().field("id").value(FieldValue.of("4")).build()).build()).
+
QueryBuilders.term().field("_id").value(FieldValue.of("4")).build()).build()).
filter(new Query.Builder().term(
-
QueryBuilders.term().field("id").value(FieldValue.of("5")).build()).build()).
+
QueryBuilders.term().field("_id").value(FieldValue.of("5")).build()).build()).
filter(new Query.Builder().term(
-
QueryBuilders.term().field("id").value(FieldValue.of("6")).build()).build()).
+
QueryBuilders.term().field("_id").value(FieldValue.of("6")).build()).build()).
build()).build()).
usingRecursiveComparison().isEqualTo(query);
@@ -288,17 +288,17 @@ public class OpenSearchAnySearchDAOTest {
assertThat(
new Query.Builder().disMax(QueryBuilders.disMax().
queries(new Query.Builder().term(
-
QueryBuilders.term().field("id").value(FieldValue.of("1")).build()).build()).
+
QueryBuilders.term().field("_id").value(FieldValue.of("1")).build()).build()).
queries(new Query.Builder().term(
-
QueryBuilders.term().field("id").value(FieldValue.of("2")).build()).build()).
+
QueryBuilders.term().field("_id").value(FieldValue.of("2")).build()).build()).
queries(new Query.Builder().term(
-
QueryBuilders.term().field("id").value(FieldValue.of("3")).build()).build()).
+
QueryBuilders.term().field("_id").value(FieldValue.of("3")).build()).build()).
queries(new Query.Builder().term(
-
QueryBuilders.term().field("id").value(FieldValue.of("4")).build()).build()).
+
QueryBuilders.term().field("_id").value(FieldValue.of("4")).build()).build()).
queries(new Query.Builder().term(
-
QueryBuilders.term().field("id").value(FieldValue.of("5")).build()).build()).
+
QueryBuilders.term().field("_id").value(FieldValue.of("5")).build()).build()).
queries(new Query.Builder().term(
-
QueryBuilders.term().field("id").value(FieldValue.of("6")).build()).build()).
+
QueryBuilders.term().field("_id").value(FieldValue.of("6")).build()).build()).
build()).build()).
usingRecursiveComparison().isEqualTo(query);
@@ -324,24 +324,24 @@ public class OpenSearchAnySearchDAOTest {
new Query.Builder().bool(QueryBuilders.bool().
filter(new
Query.Builder().disMax(QueryBuilders.disMax().
queries(new Query.Builder().term(
- QueryBuilders.term().field("id").
+ QueryBuilders.term().field("_id").
value(FieldValue.of("1")).build()).build()).
queries(new Query.Builder().term(
- QueryBuilders.term().field("id").
+ QueryBuilders.term().field("_id").
value(FieldValue.of("2")).build()).build()).
queries(new Query.Builder().term(
- QueryBuilders.term().field("id").
+ QueryBuilders.term().field("_id").
value(FieldValue.of("3")).build()).build()).build()).
build()).
filter(new
Query.Builder().disMax(QueryBuilders.disMax().
queries(new Query.Builder().term(
- QueryBuilders.term().field("id").
+ QueryBuilders.term().field("_id").
value(FieldValue.of("4")).build()).build()).
queries(new Query.Builder().term(
- QueryBuilders.term().field("id").
+ QueryBuilders.term().field("_id").
value(FieldValue.of("5")).build()).build()).
queries(new Query.Builder().term(
- QueryBuilders.term().field("id").
+ QueryBuilders.term().field("_id").
value(FieldValue.of("6")).build()).build()).build()).
build()).
build()).build()).
@@ -369,24 +369,24 @@ public class OpenSearchAnySearchDAOTest {
new Query.Builder().disMax(QueryBuilders.disMax().
queries(new
Query.Builder().bool(QueryBuilders.bool().
filter(new Query.Builder().term(
- QueryBuilders.term().field("id").
+ QueryBuilders.term().field("_id").
value(FieldValue.of("1")).build()).build()).
filter(new Query.Builder().term(
- QueryBuilders.term().field("id").
+ QueryBuilders.term().field("_id").
value(FieldValue.of("2")).build()).build()).
filter(new Query.Builder().term(
- QueryBuilders.term().field("id").
+ QueryBuilders.term().field("_id").
value(FieldValue.of("3")).build()).build()).build()).
build()).
queries(new
Query.Builder().bool(QueryBuilders.bool().
filter(new Query.Builder().term(
- QueryBuilders.term().field("id").
+ QueryBuilders.term().field("_id").
value(FieldValue.of("4")).build()).build()).
filter(new Query.Builder().term(
- QueryBuilders.term().field("id").
+ QueryBuilders.term().field("_id").
value(FieldValue.of("5")).build()).build()).
filter(new Query.Builder().term(
- QueryBuilders.term().field("id").
+ QueryBuilders.term().field("_id").
value(FieldValue.of("6")).build()).build()).build()).
build()).
build()).build()).
diff --git
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SearchITCase.java
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SearchITCase.java
index 73f1b0c808..afc5a1cb87 100644
---
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SearchITCase.java
+++
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SearchITCase.java
@@ -86,6 +86,13 @@ public class SearchITCase extends AbstractITCase {
fiql(SyncopeClient.getUserSearchConditionBuilder().isNull("loginDate").query()).build());
assertNotNull(matchingUsers);
assertFalse(matchingUsers.getResult().isEmpty());
+
+ // by key
+ matchingUsers = USER_SERVICE.search(new
AnyQuery.Builder().realm(SyncopeConstants.ROOT_REALM).
+ fiql(SyncopeClient.getUserSearchConditionBuilder().
+
is("key").equalTo("1417acbe-cbf6-4277-9372-e75e04f97000").query()).build());
+ assertNotNull(matchingUsers);
+ assertFalse(matchingUsers.getResult().isEmpty());
}
@Test
@@ -93,7 +100,7 @@ public class SearchITCase extends AbstractITCase {
PagedResult<UserTO> matchingUsers = USER_SERVICE.search(
new AnyQuery.Builder().realm(SyncopeConstants.ROOT_REALM).
fiql(SyncopeClient.getUserSearchConditionBuilder().
-
is("username").equalToIgnoreCase("RoSsINI").and("key").lessThan(2).query()).build());
+
is("username").equalToIgnoreCase("RoSsINI").and("key").notNullValue().query()).build());
assertNotNull(matchingUsers);
assertEquals(1, matchingUsers.getResult().size());
assertEquals("rossini",
matchingUsers.getResult().getFirst().getUsername());
@@ -118,7 +125,7 @@ public class SearchITCase extends AbstractITCase {
PagedResult<UserTO> matchingUsers = USER_SERVICE.search(
new AnyQuery.Builder().realm(SyncopeConstants.ROOT_REALM).
fiql(SyncopeClient.getUserSearchConditionBuilder().
-
is("username").equalTo("rossini").and("key").lessThan(2).query()).build());
+
is("key").notNullValue().and().is("username").equalTo("rossini").query()).build());
assertNotNull(matchingUsers);
assertEquals(1, matchingUsers.getResult().size());
assertEquals("rossini",
matchingUsers.getResult().getFirst().getUsername());
@@ -1033,7 +1040,7 @@ public class SearchITCase extends AbstractITCase {
assertFalse(users.getResult().isEmpty());
assertTrue(users.getResult().stream().
allMatch(u ->
"[email protected]".equals(u.getPlainAttr("email").
- orElseThrow().getValues().getFirst())));
+ orElseThrow().getValues().getFirst())));
// 1. create user with similar email
UserTO user =
createUser(UserITCase.getSample("[email protected]")).getEntity();
@@ -1055,7 +1062,7 @@ public class SearchITCase extends AbstractITCase {
assertFalse(users.getResult().isEmpty());
assertTrue(users.getResult().stream().
allMatch(u ->
"[email protected]".equals(u.getPlainAttr("email").
- orElseThrow().getValues().getFirst())));
+ orElseThrow().getValues().getFirst())));
assertTrue(users.getResult().stream().noneMatch(u ->
user.getKey().equals(u.getKey())));
}
diff --git a/pom.xml b/pom.xml
index 319ba51b71..2de1d2b46f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -505,7 +505,7 @@ under the License.
<tomcat.version>11.0.9</tomcat.version>
<wildfly.version>36.0.1.Final</wildfly.version>
- <payara.version>6.2025.6</payara.version>
+ <payara.version>6.2025.7</payara.version>
<jakarta.faces.version>4.1.3</jakarta.faces.version>
<docker.postgresql.version>17-alpine</docker.postgresql.version>