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ò <ilgro...@apache.org>
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 -> 
"ve...@syncope.org".equals(u.getPlainAttr("email").
-                    orElseThrow().getValues().getFirst())));
+                orElseThrow().getValues().getFirst())));
 
         // 1. create user with similar email
         UserTO user = 
createUser(UserITCase.getSample("bisve...@syncope.org")).getEntity();
@@ -1055,7 +1062,7 @@ public class SearchITCase extends AbstractITCase {
         assertFalse(users.getResult().isEmpty());
         assertTrue(users.getResult().stream().
                 allMatch(u -> 
"ve...@syncope.org".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>


Reply via email to