Index: main/plugin-repository/src/org/ametys/plugins/repository/query/expression/StringExpression.java
===================================================================
--- main/plugin-repository/src/org/ametys/plugins/repository/query/expression/StringExpression.java	(revision 25396)
+++ main/plugin-repository/src/org/ametys/plugins/repository/query/expression/StringExpression.java	(working copy)
@@ -72,13 +72,33 @@
     
     public String build()
     {
-        if (_caseInsensitive)
+        if (_operator.equals(Operator.WD))
         {
-            return "fn:lower-case(" + _metadata.build() + ") " + _operator + " '" + _value.toLowerCase().replaceAll("'", "''") + "'";
+            if (_caseInsensitive)
+            {
+                return "jcr:like(fn:lower-case(" + _metadata.build() + "), '%" + _escapeValue(_value.toLowerCase()) + "%')";
+            }
+            else
+            {
+                return "jcr:like(" + _metadata.build() + ", '%" + _escapeValue(_value) + "%')";
+            }
         }
         else
         {
-            return _metadata.build() + " " + _operator + " '" + _value.replaceAll("'", "''") + "'";
+            if (_caseInsensitive)
+            {
+                return "fn:lower-case(" + _metadata.build() + ") " + _operator + " '" + _value.toLowerCase().replaceAll("'", "''") + "'";
+            }
+            else
+            {
+                return _metadata.build() + " " + _operator + " '" + _value.replaceAll("'", "''") + "'";
+            }
         }
     }
+    
+    private String _escapeValue(String value)
+    {
+        // First escape ' - " \ _ and %, Then escape ' into '' for XQuery compliance
+        return value.replaceAll("(['\\-_\"\\\\%])", "\\\\$1").replaceAll("'", "''");
+    }
 }
Index: main/plugin-repository/src/org/ametys/plugins/repository/query/expression/Expression.java
===================================================================
--- main/plugin-repository/src/org/ametys/plugins/repository/query/expression/Expression.java	(revision 25396)
+++ main/plugin-repository/src/org/ametys/plugins/repository/query/expression/Expression.java	(working copy)
@@ -24,6 +24,15 @@
     /** Enumeration of available operators in {@link Expression} */
     public enum Operator 
     {
+        /** Constant of test's operator for 'like' comparison */
+        WD 
+        {
+            @Override
+            public String toString()
+            {
+                return "~";
+            }
+        },
         /** Constant of test's operator for 'less than' comparison */
         LT 
         {