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 650aace85f [SYNCOPE-1911] Chaging index settings and adjusting queries 
to work with caseInensitive
650aace85f is described below

commit 650aace85f74dd4627d71f00dc076717040cde37
Author: Francesco Chicchiriccò <[email protected]>
AuthorDate: Fri Sep 19 12:27:02 2025 +0200

    [SYNCOPE-1911] Chaging index settings and adjusting queries to work with 
caseInensitive
---
 .../client/ElasticsearchIndexManager.java          |  17 +--
 .../elasticsearch/client/ElasticsearchUtils.java   |  16 ---
 .../dao/ElasticsearchAnySearchDAO.java             |  53 ++++-----
 .../dao/ElasticsearchRealmSearchDAO.java           |  30 ++---
 .../dao/ElasticsearchAnySearchDAOTest.java         | 114 ++++++++++--------
 .../opensearch/client/OpenSearchIndexManager.java  |  17 +--
 .../ext/opensearch/client/OpenSearchUtils.java     |  16 ---
 .../opensearch/dao/OpenSearchAnySearchDAO.java     |  58 ++++------
 .../opensearch/dao/OpenSearchRealmSearchDAO.java   |  33 ++----
 .../opensearch/dao/OpenSearchAnySearchDAOTest.java | 128 +++++++++++----------
 .../org/apache/syncope/fit/core/SearchITCase.java  |  26 +++++
 11 files changed, 225 insertions(+), 283 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 df7c8c8f7b..6cb94d554f 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
@@ -21,8 +21,6 @@ package org.apache.syncope.ext.elasticsearch.client;
 import co.elastic.clients.elasticsearch.ElasticsearchClient;
 import co.elastic.clients.elasticsearch._types.ElasticsearchException;
 import co.elastic.clients.elasticsearch._types.Refresh;
-import co.elastic.clients.elasticsearch._types.analysis.CustomNormalizer;
-import co.elastic.clients.elasticsearch._types.analysis.Normalizer;
 import co.elastic.clients.elasticsearch._types.mapping.DynamicTemplate;
 import co.elastic.clients.elasticsearch._types.mapping.KeywordProperty;
 import co.elastic.clients.elasticsearch._types.mapping.Property;
@@ -101,14 +99,7 @@ public class ElasticsearchIndexManager {
 
     public IndexSettings defaultSettings() {
         return new IndexSettings.Builder().
-                analysis(new IndexSettingsAnalysis.Builder().
-                        normalizer("string_lowercase", new 
Normalizer.Builder().
-                                custom(new CustomNormalizer.Builder().
-                                        charFilter(List.of()).
-                                        filter("lowercase").
-                                        build()).
-                                build()).
-                        build()).
+                analysis(new IndexSettingsAnalysis.Builder().build()).
                 numberOfShards(numberOfShards).
                 numberOfReplicas(numberOfReplicas).
                 build();
@@ -121,7 +112,7 @@ public class ElasticsearchIndexManager {
                         new DynamicTemplate.Builder().
                                 matchMappingType("string").
                                 mapping(new Property.Builder().
-                                        keyword(new 
KeywordProperty.Builder().normalizer("string_lowercase").build()).
+                                        keyword(new 
KeywordProperty.Builder().build()).
                                         build()).
                                 build()))).
                 build();
@@ -134,7 +125,7 @@ public class ElasticsearchIndexManager {
                         new DynamicTemplate.Builder().
                                 matchMappingType("string").
                                 mapping(new Property.Builder().
-                                        keyword(new 
KeywordProperty.Builder().normalizer("string_lowercase").build()).
+                                        keyword(new 
KeywordProperty.Builder().build()).
                                         build()).
                                 build()))).
                 build();
@@ -147,7 +138,7 @@ public class ElasticsearchIndexManager {
                         new DynamicTemplate.Builder().
                                 matchMappingType("string").
                                 mapping(new Property.Builder().
-                                        keyword(new 
KeywordProperty.Builder().normalizer("string_lowercase").build()).
+                                        keyword(new 
KeywordProperty.Builder().build()).
                                         build()).
                                 build()))).
                 properties(
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 ac667c3875..7b77342376 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
@@ -27,7 +27,6 @@ import java.util.Map;
 import java.util.Optional;
 import java.util.Set;
 import java.util.stream.Collectors;
-import org.apache.commons.lang3.ArrayUtils;
 import org.apache.syncope.common.lib.types.AnyTypeKind;
 import org.apache.syncope.core.persistence.api.dao.AnyObjectDAO;
 import org.apache.syncope.core.persistence.api.dao.GroupDAO;
@@ -64,21 +63,6 @@ public class ElasticsearchUtils {
         return domain.toLowerCase() + "_audit";
     }
 
-    protected static final char[] ELASTICSEARCH_REGEX_CHARS = {
-        '.', '?', '+', '*', '|', '{', '}', '[', ']', '(', ')', '"', '\\', '&' 
};
-
-    public static String escapeForLikeRegex(final char c) {
-        StringBuilder output = new StringBuilder();
-
-        if (ArrayUtils.contains(ELASTICSEARCH_REGEX_CHARS, c)) {
-            output.append('\\');
-        }
-
-        output.append(c);
-
-        return output.toString();
-    }
-
     protected final UserDAO userDAO;
 
     protected final GroupDAO groupDAO;
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 335a53dd45..41737a6aa5 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
@@ -144,14 +144,14 @@ public class ElasticsearchAnySearchDAO extends 
AbstractAnySearchDAO {
                     realmSearchDAO.findDescendants(realm.getFullPath(), 
base.getFullPath()).
                             forEach(descendant -> queries.add(
                             new Query.Builder().term(QueryBuilders.term().
-                                    field("realm").value(descendant).build()).
+                                    
field("realm").value(descendant).caseInsensitive(false).build()).
                                     build()));
                 } else {
                     dynRealmDAO.findById(realmPath).ifPresentOrElse(
                             dynRealm -> {
                                 dynRealmKeys.add(dynRealm.getKey());
                                 queries.add(new 
Query.Builder().term(QueryBuilders.term().
-                                        
field("dynRealm").value(dynRealm.getKey()).build()).
+                                        
field("dynRealm").value(dynRealm.getKey()).caseInsensitive(false).build()).
                                         build());
                             },
                             () -> LOG.warn("Ignoring invalid dynamic realm 
{}", realmPath));
@@ -160,7 +160,7 @@ public class ElasticsearchAnySearchDAO extends 
AbstractAnySearchDAO {
         } else {
             if (adminRealms.stream().anyMatch(r -> 
r.startsWith(base.getFullPath()))) {
                 queries.add(new Query.Builder().term(QueryBuilders.term().
-                        field("realm").value(base.getKey()).build()).
+                        
field("realm").value(base.getKey()).caseInsensitive(false).build()).
                         build());
             }
         }
@@ -188,7 +188,7 @@ public class ElasticsearchAnySearchDAO extends 
AbstractAnySearchDAO {
                 query = new Query.Builder().bool(
                         QueryBuilders.bool().
                                 filter(new 
Query.Builder().term(QueryBuilders.term().
-                                        
field("realm").value(base.getKey()).build()).
+                                        
field("realm").value(base.getKey()).caseInsensitive(false).build()).
                                         build()).
                                 filter(query).build()).
                         build();
@@ -259,8 +259,7 @@ public class ElasticsearchAnySearchDAO extends 
AbstractAnySearchDAO {
                 options.add(new SortOptions.Builder().field(
                         new FieldSort.Builder().
                                 field(sortName).
-                                order(clause.getDirection() == 
Sort.Direction.ASC
-                                        ? SortOrder.Asc : SortOrder.Desc).
+                                order(clause.getDirection() == 
Sort.Direction.ASC ? SortOrder.Asc : SortOrder.Desc).
                                 build()).
                         build());
             }
@@ -436,14 +435,14 @@ public class ElasticsearchAnySearchDAO extends 
AbstractAnySearchDAO {
 
     protected Query getQuery(final RelationshipTypeCond cond) {
         return new Query.Builder().term(QueryBuilders.term().
-                
field("relationshipTypes").value(cond.getRelationshipTypeKey()).build()).
+                
field("relationshipTypes").value(cond.getRelationshipTypeKey()).caseInsensitive(false).build()).
                 build();
     }
 
     protected Query getQuery(final RelationshipCond cond) {
         List<Query> queries = check(cond).stream().
                 map(key -> new Query.Builder().term(QueryBuilders.term().
-                field("relationships").value(key).build()).
+                
field("relationships").value(key).caseInsensitive(false).build()).
                 build()).toList();
 
         return queries.size() == 1
@@ -454,7 +453,7 @@ public class ElasticsearchAnySearchDAO extends 
AbstractAnySearchDAO {
     protected Query getQuery(final MembershipCond cond) {
         List<Query> queries = check(cond).stream().
                 map(key -> new Query.Builder().term(QueryBuilders.term().
-                field("memberships").value(key).build()).
+                
field("memberships").value(key).caseInsensitive(false).build()).
                 build()).toList();
 
         return queries.size() == 1
@@ -464,20 +463,20 @@ public class ElasticsearchAnySearchDAO extends 
AbstractAnySearchDAO {
 
     protected Query getQuery(final RoleCond cond) {
         return new Query.Builder().term(QueryBuilders.term().
-                field("roles").value(cond.getRole()).build()).
+                
field("roles").value(cond.getRole()).caseInsensitive(false).build()).
                 build();
     }
 
     protected Query getQuery(final DynRealmCond cond) {
         return new Query.Builder().term(QueryBuilders.term().
-                field("dynRealms").value(cond.getDynRealm()).build()).
+                
field("dynRealms").value(cond.getDynRealm()).caseInsensitive(false).build()).
                 build();
     }
 
     protected Query getQuery(final MemberCond cond) {
         List<Query> queries = check(cond).stream().
                 map(key -> new Query.Builder().term(QueryBuilders.term().
-                field("members").value(key).build()).
+                field("members").value(key).caseInsensitive(false).build()).
                 build()).toList();
 
         return queries.size() == 1
@@ -487,13 +486,13 @@ public class ElasticsearchAnySearchDAO extends 
AbstractAnySearchDAO {
 
     protected Query getQuery(final AuxClassCond cond) {
         return new Query.Builder().term(QueryBuilders.term().
-                field("auxClasses").value(cond.getAuxClass()).build()).
+                
field("auxClasses").value(cond.getAuxClass()).caseInsensitive(false).build()).
                 build();
     }
 
     protected Query getQuery(final ResourceCond cond) {
         return new Query.Builder().term(QueryBuilders.term().
-                field("resources").value(cond.getResource()).build()).
+                
field("resources").value(cond.getResource()).caseInsensitive(false).build()).
                 build();
     }
 
@@ -520,32 +519,20 @@ public class ElasticsearchAnySearchDAO extends 
AbstractAnySearchDAO {
                 break;
 
             case ILIKE:
-                StringBuilder output = new StringBuilder();
-                for (char c : 
cond.getExpression().toLowerCase().replace("\\_", "_").toCharArray()) {
-                    if (c == '%') {
-                        output.append(".*");
-                    } else if (Character.isLetter(c)) {
-                        output.append('[').
-                                append(c).
-                                append(Character.toUpperCase(c)).
-                                append(']');
-                    } else {
-                        
output.append(ElasticsearchUtils.escapeForLikeRegex(c));
-                    }
-                }
-                query = new Query.Builder().regexp(QueryBuilders.regexp().
-                        
field(schema.getKey()).value(output.toString()).build()).build();
+                query = new Query.Builder().wildcard(QueryBuilders.wildcard().
+                        
field(schema.getKey()).value(cond.getExpression().replace('%', 
'*').replace("\\_", "_")).
+                        caseInsensitive(true).build()).build();
                 break;
 
             case LIKE:
                 query = new Query.Builder().wildcard(QueryBuilders.wildcard().
                         
field(schema.getKey()).value(cond.getExpression().replace('%', 
'*').replace("\\_", "_")).
-                        build()).build();
+                        caseInsensitive(false).build()).build();
                 break;
 
             case IEQ:
-                query = new Query.Builder().match(QueryBuilders.match().
-                        
field(schema.getKey()).query(cond.getExpression().toLowerCase()).build()).
+                query = new Query.Builder().term(QueryBuilders.term().
+                        
field(schema.getKey()).value(cond.getExpression()).caseInsensitive(true).build()).
                         build();
                 break;
 
@@ -561,7 +548,7 @@ public class ElasticsearchAnySearchDAO extends 
AbstractAnySearchDAO {
                     fieldValue = FieldValue.of(value.toString());
                 }
                 query = new Query.Builder().term(QueryBuilders.term().
-                        field(schema.getKey()).value(fieldValue).build()).
+                        
field(schema.getKey()).value(fieldValue).caseInsensitive(false).build()).
                         build();
                 break;
 
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 5dae257e56..77b9bebe0d 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
@@ -92,7 +92,7 @@ public class ElasticsearchRealmSearchDAO implements 
RealmSearchDAO {
                 
index(ElasticsearchUtils.getRealmIndex(AuthContextUtils.getDomain())).
                 searchType(SearchType.QueryThenFetch).
                 query(new Query.Builder().term(QueryBuilders.term().
-                        field("fullPath").value(fullPath).build()).build()).
+                        
field("fullPath").value(fullPath).caseInsensitive(false).build()).build()).
                 size(1).
                 fields(List.of()).source(new 
SourceConfig.Builder().fetch(false).build()).
                 build();
@@ -134,7 +134,7 @@ public class ElasticsearchRealmSearchDAO implements 
RealmSearchDAO {
     public List<Realm> findByName(final String name) {
         List<String> result = search(
                 new Query.Builder().term(QueryBuilders.term().
-                        field("name").value(name).build()).build());
+                        
field("name").value(name).caseInsensitive(false).build()).build());
         return result.stream().map(realmDAO::findById).
                 flatMap(Optional::stream).map(Realm.class::cast).toList();
     }
@@ -143,7 +143,7 @@ public class ElasticsearchRealmSearchDAO implements 
RealmSearchDAO {
     public List<Realm> findChildren(final Realm realm) {
         List<String> result = search(
                 new Query.Builder().term(QueryBuilders.term().
-                        
field("parent_id").value(realm.getKey()).build()).build());
+                        
field("parent_id").value(realm.getKey()).caseInsensitive(false).build()).build());
         return result.stream().map(realmDAO::findById).
                 flatMap(Optional::stream).map(Realm.class::cast).toList();
     }
@@ -152,7 +152,7 @@ public class ElasticsearchRealmSearchDAO implements 
RealmSearchDAO {
         List<Query> basesQueries = new ArrayList<>();
         bases.forEach(base -> {
             basesQueries.add(new Query.Builder().term(QueryBuilders.term().
-                    field("fullPath").value(base).build()).build());
+                    
field("fullPath").value(base).caseInsensitive(false).build()).build());
             basesQueries.add(new Query.Builder().regexp(QueryBuilders.regexp().
                     
field("fullPath").value(SyncopeConstants.ROOT_REALM.equals(base) ? "/.*" : base 
+ "/.*").
                     build()).build());
@@ -163,25 +163,11 @@ public class ElasticsearchRealmSearchDAO implements 
RealmSearchDAO {
             return prefix;
         }
 
-        StringBuilder output = new StringBuilder();
-        for (char c : keyword.toLowerCase().toCharArray()) {
-            if (c == '%') {
-                output.append(".*");
-            } else if (Character.isLetter(c)) {
-                output.append('[').
-                        append(c).
-                        append(Character.toUpperCase(c)).
-                        append(']');
-            } else {
-                output.append(ElasticsearchUtils.escapeForLikeRegex(c));
-            }
-        }
-
         return new Query.Builder().bool(QueryBuilders.bool().filter(
                 prefix,
-                new Query.Builder().regexp(QueryBuilders.regexp().
-                        field("name").value(output.toString()).build()).
-                        build()).build()).
+                new Query.Builder().wildcard(QueryBuilders.wildcard().
+                        field("name").value(keyword.replace('%', 
'*').replace("\\_", "_")).
+                        caseInsensitive(true).build()).build()).build()).
                 build();
     }
 
@@ -241,7 +227,7 @@ public class ElasticsearchRealmSearchDAO implements 
RealmSearchDAO {
     public List<String> findDescendants(final String base, final String 
prefix) {
         Query prefixQuery = new 
Query.Builder().disMax(QueryBuilders.disMax().queries(
                 new Query.Builder().term(QueryBuilders.term().
-                        field("fullPath").value(prefix).build()).build(),
+                        
field("fullPath").value(prefix).caseInsensitive(false).build()).build(),
                 new Query.Builder().prefix(QueryBuilders.prefix().
                         
field("fullPath").value(SyncopeConstants.ROOT_REALM.equals(prefix) ? "/" : 
prefix + "/").
                         build()).build()).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 15b985a0a2..b4be738a7b 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
@@ -128,7 +128,8 @@ public class ElasticsearchAnySearchDAOTest {
                 searchDAO.getAdminRealmsFilter(root, true, adminRealms, 
AnyTypeKind.USER);
 
         assertThat(new Query.Builder().disMax(QueryBuilders.disMax().queries(
-                new 
Query.Builder().term(QueryBuilders.term().field("realm").value("rootKey").build()).
+                new 
Query.Builder().term(QueryBuilders.term().caseInsensitive(false).
+                        
field("realm").value("rootKey").caseInsensitive(false).build()).
                         build()).build()).build()).
                 usingRecursiveComparison().isEqualTo(filter.getLeft().get());
         assertEquals(Set.of(), filter.getMiddle());
@@ -196,7 +197,8 @@ 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().term(QueryBuilders.term().field("memberships").value("groupKey").
+                            filter(new 
Query.Builder().term(QueryBuilders.term().caseInsensitive(false).
+                                    
field("memberships").value("groupKey").caseInsensitive(false).
                                     build()).build()).build()).build()).
                     usingRecursiveComparison().
                     isEqualTo(request.query());
@@ -259,18 +261,18 @@ public class ElasticsearchAnySearchDAOTest {
             assertEquals(6, ((BoolQuery) query._get()).filter().size());
             assertThat(
                     new Query.Builder().bool(QueryBuilders.bool().
-                            filter(new Query.Builder().term(
-                                    
QueryBuilders.term().field("_id").value("1").build()).build()).
-                            filter(new Query.Builder().term(
-                                    
QueryBuilders.term().field("_id").value("2").build()).build()).
-                            filter(new Query.Builder().term(
-                                    
QueryBuilders.term().field("_id").value("3").build()).build()).
-                            filter(new Query.Builder().term(
-                                    
QueryBuilders.term().field("_id").value("4").build()).build()).
-                            filter(new Query.Builder().term(
-                                    
QueryBuilders.term().field("_id").value("5").build()).build()).
-                            filter(new Query.Builder().term(
-                                    
QueryBuilders.term().field("_id").value("6").build()).build()).
+                            filter(new 
Query.Builder().term(QueryBuilders.term().
+                                    
caseInsensitive(false).field("_id").value("1").build()).build()).
+                            filter(new 
Query.Builder().term(QueryBuilders.term().
+                                    
caseInsensitive(false).field("_id").value("2").build()).build()).
+                            filter(new 
Query.Builder().term(QueryBuilders.term().
+                                    
caseInsensitive(false).field("_id").value("3").build()).build()).
+                            filter(new 
Query.Builder().term(QueryBuilders.term().
+                                    
caseInsensitive(false).field("_id").value("4").build()).build()).
+                            filter(new 
Query.Builder().term(QueryBuilders.term().
+                                    
caseInsensitive(false).field("_id").value("5").build()).build()).
+                            filter(new 
Query.Builder().term(QueryBuilders.term().
+                                    
caseInsensitive(false).field("_id").value("6").build()).build()).
                             build()).build()).
                     usingRecursiveComparison().isEqualTo(query);
 
@@ -286,18 +288,18 @@ public class ElasticsearchAnySearchDAOTest {
             assertEquals(6, ((DisMaxQuery) query._get()).queries().size());
             assertThat(
                     new Query.Builder().disMax(QueryBuilders.disMax().
-                            queries(new Query.Builder().term(
-                                    
QueryBuilders.term().field("_id").value("1").build()).build()).
-                            queries(new Query.Builder().term(
-                                    
QueryBuilders.term().field("_id").value("2").build()).build()).
-                            queries(new Query.Builder().term(
-                                    
QueryBuilders.term().field("_id").value("3").build()).build()).
-                            queries(new Query.Builder().term(
-                                    
QueryBuilders.term().field("_id").value("4").build()).build()).
-                            queries(new Query.Builder().term(
-                                    
QueryBuilders.term().field("_id").value("5").build()).build()).
-                            queries(new Query.Builder().term(
-                                    
QueryBuilders.term().field("_id").value("6").build()).build()).
+                            queries(new 
Query.Builder().term(QueryBuilders.term().
+                                    
caseInsensitive(false).field("_id").value("1").build()).build()).
+                            queries(new 
Query.Builder().term(QueryBuilders.term().
+                                    
caseInsensitive(false).field("_id").value("2").build()).build()).
+                            queries(new 
Query.Builder().term(QueryBuilders.term().
+                                    
caseInsensitive(false).field("_id").value("3").build()).build()).
+                            queries(new 
Query.Builder().term(QueryBuilders.term().
+                                    
caseInsensitive(false).field("_id").value("4").build()).build()).
+                            queries(new 
Query.Builder().term(QueryBuilders.term().
+                                    
caseInsensitive(false).field("_id").value("5").build()).build()).
+                            queries(new 
Query.Builder().term(QueryBuilders.term().
+                                    
caseInsensitive(false).field("_id").value("6").build()).build()).
                             build()).build()).
                     usingRecursiveComparison().isEqualTo(query);
 
@@ -322,20 +324,26 @@ public class ElasticsearchAnySearchDAOTest {
             assertThat(
                     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()).
-                                    queries(new Query.Builder().term(
-                                            
QueryBuilders.term().field("_id").value("2").build()).build()).
-                                    queries(new Query.Builder().term(
-                                            
QueryBuilders.term().field("_id").value("3").build()).build()).build()).
+                                    queries(new 
Query.Builder().term(QueryBuilders.term().
+                                            
caseInsensitive(false).field("_id").value("1").build()).
+                                            build()).
+                                    queries(new 
Query.Builder().term(QueryBuilders.term().
+                                            
caseInsensitive(false).field("_id").value("2").build()).
+                                            build()).
+                                    queries(new 
Query.Builder().term(QueryBuilders.term().
+                                            
caseInsensitive(false).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()).
-                                    queries(new Query.Builder().term(
-                                            
QueryBuilders.term().field("_id").value("5").build()).build()).
-                                    queries(new Query.Builder().term(
-                                            
QueryBuilders.term().field("_id").value("6").build()).build()).build()).
+                                    queries(new 
Query.Builder().term(QueryBuilders.term().
+                                            
caseInsensitive(false).field("_id").value("4").build()).
+                                            build()).
+                                    queries(new 
Query.Builder().term(QueryBuilders.term().
+                                            
caseInsensitive(false).field("_id").value("5").build()).
+                                            build()).
+                                    queries(new 
Query.Builder().term(QueryBuilders.term().
+                                            
caseInsensitive(false).field("_id").value("6").build()).
+                                            build()).build()).
                                     build()).
                             build()).build()).
                     usingRecursiveComparison().isEqualTo(query);
@@ -361,20 +369,26 @@ public class ElasticsearchAnySearchDAOTest {
             assertThat(
                     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()).
-                                    filter(new Query.Builder().term(
-                                            
QueryBuilders.term().field("_id").value("2").build()).build()).
-                                    filter(new Query.Builder().term(
-                                            
QueryBuilders.term().field("_id").value("3").build()).build()).build()).
+                                    filter(new 
Query.Builder().term(QueryBuilders.term().
+                                            
caseInsensitive(false).field("_id").value("1").build()).
+                                            build()).
+                                    filter(new 
Query.Builder().term(QueryBuilders.term().
+                                            
caseInsensitive(false).field("_id").value("2").build()).
+                                            build()).
+                                    filter(new 
Query.Builder().term(QueryBuilders.term().
+                                            
caseInsensitive(false).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()).
-                                    filter(new Query.Builder().term(
-                                            
QueryBuilders.term().field("_id").value("5").build()).build()).
-                                    filter(new Query.Builder().term(
-                                            
QueryBuilders.term().field("_id").value("6").build()).build()).build()).
+                                    filter(new 
Query.Builder().term(QueryBuilders.term().
+                                            
caseInsensitive(false).field("_id").value("4").build()).
+                                            build()).
+                                    filter(new 
Query.Builder().term(QueryBuilders.term().
+                                            
caseInsensitive(false).field("_id").value("5").build()).
+                                            build()).
+                                    filter(new 
Query.Builder().term(QueryBuilders.term().
+                                            
caseInsensitive(false).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 99aae23a4e..eade997dbf 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
@@ -31,8 +31,6 @@ import 
org.identityconnectors.framework.common.objects.SyncDeltaType;
 import org.opensearch.client.opensearch.OpenSearchClient;
 import org.opensearch.client.opensearch._types.OpenSearchException;
 import org.opensearch.client.opensearch._types.Refresh;
-import org.opensearch.client.opensearch._types.analysis.CustomNormalizer;
-import org.opensearch.client.opensearch._types.analysis.Normalizer;
 import org.opensearch.client.opensearch._types.mapping.DynamicTemplate;
 import org.opensearch.client.opensearch._types.mapping.KeywordProperty;
 import org.opensearch.client.opensearch._types.mapping.Property;
@@ -100,14 +98,7 @@ public class OpenSearchIndexManager {
 
     public IndexSettings defaultSettings() {
         return new IndexSettings.Builder().
-                analysis(new IndexSettingsAnalysis.Builder().
-                        normalizer("string_lowercase", new 
Normalizer.Builder().
-                                custom(new CustomNormalizer.Builder().
-                                        charFilter(List.of()).
-                                        filter("lowercase").
-                                        build()).
-                                build()).
-                        build()).
+                analysis(new IndexSettingsAnalysis.Builder().build()).
                 numberOfShards(numberOfShards).
                 numberOfReplicas(numberOfReplicas).
                 build();
@@ -120,7 +111,7 @@ public class OpenSearchIndexManager {
                         new DynamicTemplate.Builder().
                                 matchMappingType("string").
                                 mapping(new Property.Builder().
-                                        keyword(new 
KeywordProperty.Builder().normalizer("string_lowercase").build()).
+                                        keyword(new 
KeywordProperty.Builder().build()).
                                         build()).
                                 build()))).
                 build();
@@ -133,7 +124,7 @@ public class OpenSearchIndexManager {
                         new DynamicTemplate.Builder().
                                 matchMappingType("string").
                                 mapping(new Property.Builder().
-                                        keyword(new 
KeywordProperty.Builder().normalizer("string_lowercase").build()).
+                                        keyword(new 
KeywordProperty.Builder().build()).
                                         build()).
                                 build()))).
                 build();
@@ -146,7 +137,7 @@ public class OpenSearchIndexManager {
                         new DynamicTemplate.Builder().
                                 matchMappingType("string").
                                 mapping(new Property.Builder().
-                                        keyword(new 
KeywordProperty.Builder().normalizer("string_lowercase").build()).
+                                        keyword(new 
KeywordProperty.Builder().build()).
                                         build()).
                                 build()))).
                 properties(
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 10650a7ca3..8fb81e6bab 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
@@ -27,7 +27,6 @@ import java.util.Map;
 import java.util.Optional;
 import java.util.Set;
 import java.util.stream.Collectors;
-import org.apache.commons.lang3.ArrayUtils;
 import org.apache.syncope.common.lib.types.AnyTypeKind;
 import org.apache.syncope.core.persistence.api.dao.AnyObjectDAO;
 import org.apache.syncope.core.persistence.api.dao.GroupDAO;
@@ -64,21 +63,6 @@ public class OpenSearchUtils {
         return domain.toLowerCase() + "_audit";
     }
 
-    protected static final char[] ELASTICSEARCH_REGEX_CHARS = {
-        '.', '?', '+', '*', '|', '{', '}', '[', ']', '(', ')', '"', '\\', '&' 
};
-
-    public static String escapeForLikeRegex(final char c) {
-        StringBuilder output = new StringBuilder();
-
-        if (ArrayUtils.contains(ELASTICSEARCH_REGEX_CHARS, c)) {
-            output.append('\\');
-        }
-
-        output.append(c);
-
-        return output.toString();
-    }
-
     protected final UserDAO userDAO;
 
     protected final GroupDAO groupDAO;
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 f58cf9c3f7..647063d354 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
@@ -143,15 +143,15 @@ public class OpenSearchAnySearchDAO extends 
AbstractAnySearchDAO {
                     realmSearchDAO.findDescendants(realm.getFullPath(), 
base.getFullPath()).
                             forEach(descendant -> queries.add(
                             new Query.Builder().term(QueryBuilders.term().
-                                    
field("realm").value(FieldValue.of(descendant)).build()).
+                                    
field("realm").value(FieldValue.of(descendant)).caseInsensitive(false).build()).
                                     build()));
                 } else {
                     dynRealmDAO.findById(realmPath).ifPresentOrElse(
                             dynRealm -> {
                                 dynRealmKeys.add(dynRealm.getKey());
                                 queries.add(new 
Query.Builder().term(QueryBuilders.term().
-                                        
field("dynRealm").value(FieldValue.of(dynRealm.getKey())).build()).
-                                        build());
+                                        
field("dynRealm").value(FieldValue.of(dynRealm.getKey())).
+                                        
caseInsensitive(false).build()).build());
                             },
                             () -> LOG.warn("Ignoring invalid dynamic realm 
{}", realmPath));
                 }
@@ -159,7 +159,7 @@ public class OpenSearchAnySearchDAO extends 
AbstractAnySearchDAO {
         } else {
             if (adminRealms.stream().anyMatch(r -> 
r.startsWith(base.getFullPath()))) {
                 queries.add(new Query.Builder().term(QueryBuilders.term().
-                        
field("realm").value(FieldValue.of(base.getKey())).build()).
+                        
field("realm").value(FieldValue.of(base.getKey())).caseInsensitive(false).build()).
                         build());
             }
         }
@@ -187,8 +187,8 @@ public class OpenSearchAnySearchDAO extends 
AbstractAnySearchDAO {
                 query = new Query.Builder().bool(
                         QueryBuilders.bool().
                                 filter(new 
Query.Builder().term(QueryBuilders.term().
-                                        
field("realm").value(FieldValue.of(base.getKey())).build()).
-                                        build()).
+                                        
field("realm").value(FieldValue.of(base.getKey())).caseInsensitive(false).
+                                        build()).build()).
                                 filter(query).build()).
                         build();
             }
@@ -434,14 +434,14 @@ public class OpenSearchAnySearchDAO extends 
AbstractAnySearchDAO {
 
     protected Query getQuery(final RelationshipTypeCond cond) {
         return new Query.Builder().term(QueryBuilders.term().
-                
field("relationshipTypes").value(FieldValue.of(cond.getRelationshipTypeKey())).build()).
-                build();
+                
field("relationshipTypes").value(FieldValue.of(cond.getRelationshipTypeKey())).
+                caseInsensitive(false).build()).build();
     }
 
     protected Query getQuery(final RelationshipCond cond) {
         List<Query> queries = check(cond).stream().
                 map(key -> new Query.Builder().term(QueryBuilders.term().
-                field("relationships").value(FieldValue.of(key)).build()).
+                
field("relationships").value(FieldValue.of(key)).caseInsensitive(false).build()).
                 build()).toList();
 
         return queries.size() == 1
@@ -452,7 +452,7 @@ public class OpenSearchAnySearchDAO extends 
AbstractAnySearchDAO {
     protected Query getQuery(final MembershipCond cond) {
         List<Query> queries = check(cond).stream().
                 map(key -> new Query.Builder().term(QueryBuilders.term().
-                field("memberships").value(FieldValue.of(key)).build()).
+                
field("memberships").value(FieldValue.of(key)).caseInsensitive(false).build()).
                 build()).toList();
 
         return queries.size() == 1
@@ -462,20 +462,20 @@ public class OpenSearchAnySearchDAO extends 
AbstractAnySearchDAO {
 
     protected Query getQuery(final RoleCond cond) {
         return new Query.Builder().term(QueryBuilders.term().
-                field("roles").value(FieldValue.of(cond.getRole())).build()).
+                
field("roles").value(FieldValue.of(cond.getRole())).caseInsensitive(false).build()).
                 build();
     }
 
     protected Query getQuery(final DynRealmCond cond) {
         return new Query.Builder().term(QueryBuilders.term().
-                
field("dynRealms").value(FieldValue.of(cond.getDynRealm())).build()).
+                
field("dynRealms").value(FieldValue.of(cond.getDynRealm())).caseInsensitive(false).build()).
                 build();
     }
 
     protected Query getQuery(final MemberCond cond) {
         List<Query> queries = check(cond).stream().
                 map(key -> new Query.Builder().term(QueryBuilders.term().
-                field("members").value(FieldValue.of(key)).build()).
+                
field("members").value(FieldValue.of(key)).caseInsensitive(false).build()).
                 build()).toList();
 
         return queries.size() == 1
@@ -485,13 +485,13 @@ public class OpenSearchAnySearchDAO extends 
AbstractAnySearchDAO {
 
     protected Query getQuery(final AuxClassCond cond) {
         return new Query.Builder().term(QueryBuilders.term().
-                
field("auxClasses").value(FieldValue.of(cond.getAuxClass())).build()).
+                
field("auxClasses").value(FieldValue.of(cond.getAuxClass())).caseInsensitive(false).build()).
                 build();
     }
 
     protected Query getQuery(final ResourceCond cond) {
         return new Query.Builder().term(QueryBuilders.term().
-                
field("resources").value(FieldValue.of(cond.getResource())).build()).
+                
field("resources").value(FieldValue.of(cond.getResource())).caseInsensitive(false).build()).
                 build();
     }
 
@@ -518,33 +518,21 @@ public class OpenSearchAnySearchDAO extends 
AbstractAnySearchDAO {
                 break;
 
             case ILIKE:
-                StringBuilder output = new StringBuilder();
-                for (char c : 
cond.getExpression().toLowerCase().replace("\\_", "_").toCharArray()) {
-                    if (c == '%') {
-                        output.append(".*");
-                    } else if (Character.isLetter(c)) {
-                        output.append('[').
-                                append(c).
-                                append(Character.toUpperCase(c)).
-                                append(']');
-                    } else {
-                        output.append(OpenSearchUtils.escapeForLikeRegex(c));
-                    }
-                }
-                query = new Query.Builder().regexp(QueryBuilders.regexp().
-                        
field(schema.getKey()).value(output.toString()).build()).build();
+                query = new Query.Builder().wildcard(QueryBuilders.wildcard().
+                        
field(schema.getKey()).value(cond.getExpression().replace('%', 
'*').replace("\\_", "_")).
+                        caseInsensitive(true).build()).build();
                 break;
 
             case LIKE:
                 query = new Query.Builder().wildcard(QueryBuilders.wildcard().
                         
field(schema.getKey()).value(cond.getExpression().replace('%', 
'*').replace("\\_", "_")).
-                        build()).build();
+                        caseInsensitive(false).build()).build();
                 break;
 
             case IEQ:
-                query = new Query.Builder().match(QueryBuilders.match().
-                        
field(schema.getKey()).query(FieldValue.of(cond.getExpression().toLowerCase())).build()).
-                        build();
+                query = new Query.Builder().term(QueryBuilders.term().
+                        
field(schema.getKey()).value(FieldValue.of(cond.getExpression())).caseInsensitive(true).
+                        build()).build();
                 break;
 
             case EQ:
@@ -559,7 +547,7 @@ public class OpenSearchAnySearchDAO extends 
AbstractAnySearchDAO {
                     fieldValue = FieldValue.of(value.toString());
                 }
                 query = new Query.Builder().term(QueryBuilders.term().
-                        field(schema.getKey()).value(fieldValue).build()).
+                        
field(schema.getKey()).value(fieldValue).caseInsensitive(false).build()).
                         build();
                 break;
 
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 77cf5f3022..c9b359196f 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
@@ -93,7 +93,7 @@ public class OpenSearchRealmSearchDAO implements 
RealmSearchDAO {
                 
index(OpenSearchUtils.getRealmIndex(AuthContextUtils.getDomain())).
                 searchType(SearchType.QueryThenFetch).
                 query(new Query.Builder().term(QueryBuilders.term().
-                        
field("fullPath").value(FieldValue.of(fullPath)).build()).build()).
+                        
field("fullPath").value(FieldValue.of(fullPath)).caseInsensitive(false).build()).build()).
                 size(1).
                 fields(List.of()).source(new 
SourceConfig.Builder().fetch(false).build()).
                 build();
@@ -135,7 +135,7 @@ public class OpenSearchRealmSearchDAO implements 
RealmSearchDAO {
     public List<Realm> findByName(final String name) {
         List<String> result = search(
                 new Query.Builder().term(QueryBuilders.term().
-                        
field("name").value(FieldValue.of(name)).build()).build());
+                        
field("name").value(FieldValue.of(name)).caseInsensitive(false).build()).build());
         return result.stream().map(realmDAO::findById).
                 flatMap(Optional::stream).map(Realm.class::cast).toList();
     }
@@ -144,7 +144,8 @@ public class OpenSearchRealmSearchDAO implements 
RealmSearchDAO {
     public List<Realm> findChildren(final Realm realm) {
         List<String> result = search(
                 new Query.Builder().term(QueryBuilders.term().
-                        
field("parent_id").value(FieldValue.of(realm.getKey())).build()).build());
+                        
field("parent_id").value(FieldValue.of(realm.getKey())).caseInsensitive(false).
+                        build()).build());
         return result.stream().map(realmDAO::findById).
                 flatMap(Optional::stream).map(Realm.class::cast).toList();
     }
@@ -153,35 +154,22 @@ public class OpenSearchRealmSearchDAO implements 
RealmSearchDAO {
         List<Query> basesQueries = new ArrayList<>();
         bases.forEach(base -> {
             basesQueries.add(new Query.Builder().term(QueryBuilders.term().
-                    
field("fullPath").value(FieldValue.of(base)).build()).build());
+                    
field("fullPath").value(FieldValue.of(base)).caseInsensitive(false).build()).build());
             basesQueries.add(new Query.Builder().regexp(QueryBuilders.regexp().
                     
field("fullPath").value(SyncopeConstants.ROOT_REALM.equals(base) ? "/.*" : base 
+ "/.*").
                     build()).build());
         });
         Query prefix = new 
Query.Builder().disMax(QueryBuilders.disMax().queries(basesQueries).build()).build();
+
         if (keyword == null) {
             return prefix;
         }
 
-        StringBuilder output = new StringBuilder();
-        for (char c : keyword.toLowerCase().toCharArray()) {
-            if (c == '%') {
-                output.append(".*");
-            } else if (Character.isLetter(c)) {
-                output.append('[').
-                        append(c).
-                        append(Character.toUpperCase(c)).
-                        append(']');
-            } else {
-                output.append(OpenSearchUtils.escapeForLikeRegex(c));
-            }
-        }
-
         return new Query.Builder().bool(QueryBuilders.bool().filter(
                 prefix,
-                new Query.Builder().regexp(QueryBuilders.regexp().
-                        field("name").value(output.toString()).build()).
-                        build()).build()).
+                new Query.Builder().wildcard(QueryBuilders.wildcard().
+                        field("name").value(keyword.replace('%', 
'*').replace("\\_", "_")).
+                        caseInsensitive(true).build()).build()).build()).
                 build();
     }
 
@@ -241,7 +229,7 @@ public class OpenSearchRealmSearchDAO implements 
RealmSearchDAO {
     public List<String> findDescendants(final String base, final String 
prefix) {
         Query prefixQuery = new 
Query.Builder().disMax(QueryBuilders.disMax().queries(
                 new Query.Builder().term(QueryBuilders.term().
-                        
field("fullPath").value(FieldValue.of(prefix)).build()).build(),
+                        
field("fullPath").value(FieldValue.of(prefix)).caseInsensitive(false).build()).build(),
                 new Query.Builder().prefix(QueryBuilders.prefix().
                         
field("fullPath").value(SyncopeConstants.ROOT_REALM.equals(prefix) ? "/" : 
prefix + "/").
                         build()).build()).build()).build();
@@ -259,6 +247,7 @@ public class OpenSearchRealmSearchDAO implements 
RealmSearchDAO {
                 sort(REALM_SORT_OPTIONS).
                 fields(List.of()).source(new 
SourceConfig.Builder().fetch(false).build()).
                 build();
+        LOG.debug("Search request: {}", request);
 
         List<String> result = List.of();
         try {
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 c8b9c6935c..fd33731b09 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
@@ -129,7 +129,8 @@ public class OpenSearchAnySearchDAOTest {
                 searchDAO.getAdminRealmsFilter(root, true, adminRealms, 
AnyTypeKind.USER);
 
         assertThat(new Query.Builder().disMax(QueryBuilders.disMax().queries(
-                new 
Query.Builder().term(QueryBuilders.term().field("realm").value(FieldValue.of("rootKey")).build()).
+                new 
Query.Builder().term(QueryBuilders.term().caseInsensitive(false).
+                        
field("realm").value(FieldValue.of("rootKey")).caseInsensitive(false).build()).
                         build()).build()).build()).
                 usingRecursiveComparison().isEqualTo(filter.getLeft().get());
         assertEquals(Set.of(), filter.getMiddle());
@@ -197,8 +198,9 @@ 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().term(QueryBuilders.term().field("memberships").
-                                    
value(FieldValue.of("groupKey")).build()).build()).build()).build()).
+                            filter(new 
Query.Builder().term(QueryBuilders.term().caseInsensitive(false).
+                                    
field("memberships").value(FieldValue.of("groupKey")).caseInsensitive(false).
+                                    build()).build()).build()).build()).
                     usingRecursiveComparison().
                     isEqualTo(request.query());
         }
@@ -260,18 +262,18 @@ public class OpenSearchAnySearchDAOTest {
             assertEquals(6, ((BoolQuery) query._get()).filter().size());
             assertThat(
                     new Query.Builder().bool(QueryBuilders.bool().
-                            filter(new Query.Builder().term(
-                                    
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()).
-                            filter(new Query.Builder().term(
-                                    
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()).
-                            filter(new Query.Builder().term(
-                                    
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()).
+                            filter(new 
Query.Builder().term(QueryBuilders.term().
+                                    
caseInsensitive(false).field("_id").value(FieldValue.of("1")).build()).build()).
+                            filter(new 
Query.Builder().term(QueryBuilders.term().
+                                    
caseInsensitive(false).field("_id").value(FieldValue.of("2")).build()).build()).
+                            filter(new 
Query.Builder().term(QueryBuilders.term().
+                                    
caseInsensitive(false).field("_id").value(FieldValue.of("3")).build()).build()).
+                            filter(new 
Query.Builder().term(QueryBuilders.term().
+                                    
caseInsensitive(false).field("_id").value(FieldValue.of("4")).build()).build()).
+                            filter(new 
Query.Builder().term(QueryBuilders.term().
+                                    
caseInsensitive(false).field("_id").value(FieldValue.of("5")).build()).build()).
+                            filter(new 
Query.Builder().term(QueryBuilders.term().
+                                    
caseInsensitive(false).field("_id").value(FieldValue.of("6")).build()).build()).
                             build()).build()).
                     usingRecursiveComparison().isEqualTo(query);
 
@@ -287,18 +289,18 @@ public class OpenSearchAnySearchDAOTest {
             assertEquals(6, ((DisMaxQuery) query._get()).queries().size());
             assertThat(
                     new Query.Builder().disMax(QueryBuilders.disMax().
-                            queries(new Query.Builder().term(
-                                    
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()).
-                            queries(new Query.Builder().term(
-                                    
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()).
-                            queries(new Query.Builder().term(
-                                    
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()).
+                            queries(new 
Query.Builder().term(QueryBuilders.term().
+                                    
caseInsensitive(false).field("_id").value(FieldValue.of("1")).build()).build()).
+                            queries(new 
Query.Builder().term(QueryBuilders.term().
+                                    
caseInsensitive(false).field("_id").value(FieldValue.of("2")).build()).build()).
+                            queries(new 
Query.Builder().term(QueryBuilders.term().
+                                    
caseInsensitive(false).field("_id").value(FieldValue.of("3")).build()).build()).
+                            queries(new 
Query.Builder().term(QueryBuilders.term().
+                                    
caseInsensitive(false).field("_id").value(FieldValue.of("4")).build()).build()).
+                            queries(new 
Query.Builder().term(QueryBuilders.term().
+                                    
caseInsensitive(false).field("_id").value(FieldValue.of("5")).build()).build()).
+                            queries(new 
Query.Builder().term(QueryBuilders.term().
+                                    
caseInsensitive(false).field("_id").value(FieldValue.of("6")).build()).build()).
                             build()).build()).
                     usingRecursiveComparison().isEqualTo(query);
 
@@ -323,26 +325,26 @@ public class OpenSearchAnySearchDAOTest {
             assertThat(
                     new Query.Builder().bool(QueryBuilders.bool().
                             filter(new 
Query.Builder().disMax(QueryBuilders.disMax().
-                                    queries(new Query.Builder().term(
-                                            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()).
-                                    queries(new Query.Builder().term(
-                                            QueryBuilders.term().field("_id").
-                                                    
value(FieldValue.of("3")).build()).build()).build()).
+                                    queries(new 
Query.Builder().term(QueryBuilders.term().
+                                            
caseInsensitive(false).field("_id").value(FieldValue.of("1")).build()).
+                                            build()).
+                                    queries(new 
Query.Builder().term(QueryBuilders.term().
+                                            
caseInsensitive(false).field("_id").value(FieldValue.of("2")).build()).
+                                            build()).
+                                    queries(new 
Query.Builder().term(QueryBuilders.term().
+                                            
caseInsensitive(false).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").
-                                                    
value(FieldValue.of("4")).build()).build()).
-                                    queries(new Query.Builder().term(
-                                            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()).build()).
+                                    queries(new 
Query.Builder().term(QueryBuilders.term().
+                                            
caseInsensitive(false).field("_id").value(FieldValue.of("4")).build()).
+                                            build()).
+                                    queries(new 
Query.Builder().term(QueryBuilders.term().
+                                            
caseInsensitive(false).field("_id").value(FieldValue.of("5")).build()).
+                                            build()).
+                                    queries(new 
Query.Builder().term(QueryBuilders.term().
+                                            
caseInsensitive(false).field("_id").value(FieldValue.of("6")).build()).
+                                            build()).build()).
                                     build()).
                             build()).build()).
                     usingRecursiveComparison().isEqualTo(query);
@@ -368,26 +370,26 @@ public class OpenSearchAnySearchDAOTest {
             assertThat(
                     new Query.Builder().disMax(QueryBuilders.disMax().
                             queries(new 
Query.Builder().bool(QueryBuilders.bool().
-                                    filter(new Query.Builder().term(
-                                            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()).
-                                    filter(new Query.Builder().term(
-                                            QueryBuilders.term().field("_id").
-                                                    
value(FieldValue.of("3")).build()).build()).build()).
+                                    filter(new 
Query.Builder().term(QueryBuilders.term().
+                                            
caseInsensitive(false).field("_id").value(FieldValue.of("1")).build()).
+                                            build()).
+                                    filter(new 
Query.Builder().term(QueryBuilders.term().
+                                            
caseInsensitive(false).field("_id").value(FieldValue.of("2")).build()).
+                                            build()).
+                                    filter(new 
Query.Builder().term(QueryBuilders.term().
+                                            
caseInsensitive(false).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").
-                                                    
value(FieldValue.of("4")).build()).build()).
-                                    filter(new Query.Builder().term(
-                                            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()).build()).
+                                    filter(new 
Query.Builder().term(QueryBuilders.term().
+                                            
caseInsensitive(false).field("_id").value(FieldValue.of("4")).build()).
+                                            build()).
+                                    filter(new 
Query.Builder().term(QueryBuilders.term().
+                                            
caseInsensitive(false).field("_id").value(FieldValue.of("5")).build()).
+                                            build()).
+                                    filter(new 
Query.Builder().term(QueryBuilders.term().
+                                            
caseInsensitive(false).field("_id").value(FieldValue.of("6")).build()).
+                                            build()).build()).
                                     build()).
                             build()).build()).
                     usingRecursiveComparison().isEqualTo(query);
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 afc5a1cb87..d24ff178dc 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
@@ -118,6 +118,32 @@ public class SearchITCase extends AbstractITCase {
         assertNotNull(matchingUsers);
         assertEquals(1, matchingUsers.getResult().size());
         assertEquals("rossini", 
matchingUsers.getResult().getFirst().getUsername());
+
+        matchingUsers = USER_SERVICE.search(
+                new AnyQuery.Builder().realm(SyncopeConstants.ROOT_REALM).
+                        fiql(SyncopeClient.getUserSearchConditionBuilder().
+                                
is("username").equalTo("RoSsINI").query()).build());
+        assertTrue(matchingUsers.getResult().isEmpty());
+
+        matchingUsers = USER_SERVICE.search(
+                new AnyQuery.Builder().realm(SyncopeConstants.ROOT_REALM).
+                        fiql(SyncopeClient.getUserSearchConditionBuilder().
+                                
is("username").equalTo("rossini").query()).build());
+        assertEquals(1, matchingUsers.getResult().size());
+        assertEquals("rossini", 
matchingUsers.getResult().getFirst().getUsername());
+
+        matchingUsers = USER_SERVICE.search(
+                new AnyQuery.Builder().realm(SyncopeConstants.ROOT_REALM).
+                        fiql(SyncopeClient.getUserSearchConditionBuilder().
+                                is("fullname").equalTo("gioacchino 
rossini").query()).build());
+        assertTrue(matchingUsers.getResult().isEmpty());
+
+        matchingUsers = USER_SERVICE.search(
+                new AnyQuery.Builder().realm(SyncopeConstants.ROOT_REALM).
+                        fiql(SyncopeClient.getUserSearchConditionBuilder().
+                                is("fullname").equalTo("Gioacchino 
Rossini").query()).build());
+        assertEquals(1, matchingUsers.getResult().size());
+        assertEquals("rossini", 
matchingUsers.getResult().getFirst().getUsername());
     }
 
     @Test

Reply via email to