diff --git a/main/plugin-web/src/org/ametys/web/frontoffice/AbstractSearchGenerator.java b/main/plugin-web/src/org/ametys/web/frontoffice/AbstractSearchGenerator.java
index ce18760..b42011a 100644
--- a/main/plugin-web/src/org/ametys/web/frontoffice/AbstractSearchGenerator.java
+++ b/main/plugin-web/src/org/ametys/web/frontoffice/AbstractSearchGenerator.java
@@ -277,7 +277,7 @@
         try
         {
             // Query
-            Query queryObject = getQuery(request, siteNames, language);
+            Query queryObject = getQuery(request, siteNames, language, null);
             
             // Filter queries
             Collection<Query> filterQueries = getFilterQueries(request, siteNames, language);
@@ -502,10 +502,11 @@
      * @param request The request
      * @param siteNames The site names.
      * @param language The language
+     * @param contentType The content type potentially requested
      * @return The query object.
      * @throws IllegalArgumentException If the search field is invalid.
      */
-    protected abstract Query getQuery(Request request, Collection<String> siteNames, String language) throws IllegalArgumentException;
+    protected abstract Query getQuery(Request request, Collection<String> siteNames, String language, String contentType) throws IllegalArgumentException;
     
     /**
      * Get the filter queries from the request parameters.
diff --git a/main/plugin-web/src/org/ametys/web/frontoffice/SearchGenerator.java b/main/plugin-web/src/org/ametys/web/frontoffice/SearchGenerator.java
index 9d9ca1e..a4c3fdd 100644
--- a/main/plugin-web/src/org/ametys/web/frontoffice/SearchGenerator.java
+++ b/main/plugin-web/src/org/ametys/web/frontoffice/SearchGenerator.java
@@ -56,10 +56,10 @@
 import org.ametys.cms.search.query.OrQuery;
 import org.ametys.cms.search.query.Query;
 import org.ametys.cms.search.query.Query.Operator;
-import org.ametys.cms.search.solr.SearcherFactory.Searcher;
 import org.ametys.cms.search.query.QuerySyntaxException;
 import org.ametys.cms.search.query.StringQuery;
 import org.ametys.cms.search.query.TagQuery;
+import org.ametys.cms.search.solr.SearcherFactory.Searcher;
 import org.ametys.cms.tag.Tag;
 import org.ametys.cms.tag.TagProvider;
 import org.ametys.plugins.explorer.resources.Resource;
@@ -121,7 +121,7 @@
                     int count = 0;
                     for (String cType : cTypes)
                     {
-                        Query queryObject = getQuery(request, siteNames, language);
+                        Query queryObject = getQuery(request, siteNames, language, cType);
                         
                         Collection<Query> filterQueries = getFixedCTypeFilterQueries(request, cType, siteNames, language);
                         
@@ -222,11 +222,11 @@
     }
 
     @Override
-    protected Query getQuery(Request request, Collection<String> siteNames, String language) throws IllegalArgumentException
+    protected Query getQuery(Request request, Collection<String> siteNames, String language, String contentType) throws IllegalArgumentException
     {
         List<Query> queries = new ArrayList<>();
         
-        _addMetadataQuery(queries, language, request);
+        _addMetadataQuery(queries, language, request, contentType);
         _addTextFieldQuery(queries, language, request);
         _addAllWordsTextFieldQuery(queries, language, request);
         _addExactWordingTextFieldQuery(queries, language, request);
@@ -884,8 +884,9 @@
     }
     
     // the given metadata value is like the given text
-    private void _addMetadataQuery(Collection<Query> queries, String language, Request request) throws IllegalArgumentException
+    private void _addMetadataQuery(Collection<Query> queries, String language, Request request, String contentType) throws IllegalArgumentException
     {
+        
         ZoneItem zoneItem = (ZoneItem) request.getAttribute(org.ametys.web.repository.page.ZoneItem.class.getName());
         if (zoneItem.getServiceParameters().hasMetadata("search-by-metadata"))
         {
@@ -896,15 +897,28 @@
                 
                 if (StringUtils.isNotBlank(value))
                 {
-                    String escapedText = ClientUtils.escapeQueryChars(value).toLowerCase();
-                    if (!escapedText.startsWith("*") && !escapedText.endsWith("*"))
+                    MetadataDefinition metadataDefinition = _contentTypesHelper.getMetadataDefinition(metadataPath, new String[] {contentType},  null);
+                    if (metadataDefinition.getEnumerator() == null)
                     {
-                        escapedText = "*" + escapedText + "*";
+                        String escapedText = ClientUtils.escapeQueryChars(value).toLowerCase();
+                        if (!escapedText.startsWith("*") && !escapedText.endsWith("*"))
+                        {
+                            escapedText = "*" + escapedText + "*";
+                        }
+                        Query query = new StringQuery(metadataPath, Operator.SEARCH, escapedText, language);
+                        Query contentQuery = new PageContentQuery(query);
+                        
+                        queries.add(new OrQuery(query, contentQuery));
                     }
-                    Query query = new StringQuery(metadataPath, Operator.SEARCH, escapedText, language);
-                    Query contentQuery = new PageContentQuery(query);
+                    else
+                    {
+                        String escapedText = ClientUtils.escapeQueryChars(value).toLowerCase();
+                        Query query = new StringQuery(metadataPath, Operator.EQ, escapedText, language);
+                        Query contentQuery = new PageContentQuery(query);
+                        
+                        queries.add(new OrQuery(query, contentQuery));
+                    }
                     
-                    queries.add(new OrQuery(query, contentQuery));
                 }
             }
         }