diff --git a/app/models/collection.rb b/app/models/collection.rb
index 54212efb4ecf76278f3e6d93dd9c8bb1e090392b..f3b7f2745949ffd7685e585600c73272172b3165 100644
--- a/app/models/collection.rb
+++ b/app/models/collection.rb
@@ -65,7 +65,8 @@ class Collection < ApplicationRecord
       created_at: created_at,
       likes: likes_count,
       downloads: downloads_count,
-      review_average: review_ratings_average
+      review_average: review_ratings_average,
+      empty: collection_items.empty?
     }
   end
 
diff --git a/app/services/search_service/collection.rb b/app/services/search_service/collection.rb
index c6f805616be02c01391a98b623f62e0aba342bfc..5bd29469709d51634c3d8489b27f653afed1edd1 100644
--- a/app/services/search_service/collection.rb
+++ b/app/services/search_service/collection.rb
@@ -26,6 +26,7 @@ module SearchService
       filter << { in: { tags: @search.tags } } unless @search.tags.blank?
       filter << { in: { subjects: @search.subjects } } unless @search.subjects.blank?
       filter << { in: { educational_stages: @search.educational_stages } } unless @search.educational_stages.blank?
+      filter << { terms: { empty: show_empty } }
       filter
     end
 
@@ -40,5 +41,11 @@ module SearchService
       when 'review_average' then { review_average: { order: :desc } }
       end
     end
+
+    def show_empty
+      return [true,false] if !@user.nil? && @user.is_admin?
+      [false]
+    end
+
   end
 end
diff --git a/app/services/search_service/learning_object.rb b/app/services/search_service/learning_object.rb
index ebd525e6335b141e4f75c47c9513937f5c575da3..bff63f89f5d272e4c242eab493cea34bac8e619f 100644
--- a/app/services/search_service/learning_object.rb
+++ b/app/services/search_service/learning_object.rb
@@ -27,7 +27,7 @@ module SearchService
       filter << { in: { subjects: @search.subjects } } unless @search.subjects.blank?
       filter << { in: { educational_stages: @search.educational_stages } } unless @search.educational_stages.blank?
       filter << { in: { object_type: @search.object_types.map(&:to_i) } } unless @search.object_types.blank?
-      filter << { term: { state: validate_object } }
+      filter << { terms: { state: validate_object } }
       filter
     end
 
@@ -44,7 +44,7 @@ module SearchService
     end
 
     def validate_object
-      return ::LearningObject.states[:published] unless !@user.nil? && @user.is_admin?
+      return [::LearningObject.states[:published]] unless !@user.nil? && @user.is_admin?
       ::LearningObject.states.values
     end
   end
diff --git a/app/services/search_service/model.rb b/app/services/search_service/model.rb
index 632825a4fb309a5f1fc45aaafc861284777ecbe1..eda8a5d6e734389b82930cd87790fab5ba1354f8 100644
--- a/app/services/search_service/model.rb
+++ b/app/services/search_service/model.rb
@@ -37,8 +37,13 @@ module SearchService
     end
 
     def mount_query
-      # TODO: match_all don't work with filter, fix when possible
-      return { "match_all": {} } if @search.query == "*"
+      match_all_query = {
+        filtered:{
+          query: { match_all: {} },
+          filter: mount_filter
+        }
+      }
+      return match_all_query if @search.query == "*"
 
       {
         function_score: {