diff --git a/ee/lib/elastic/latest/snippet_class_proxy.rb b/ee/lib/elastic/latest/snippet_class_proxy.rb
index 4072a44969947d8214089a361e6d3d6f9476ea29..72c5915f4e40937ae2464a235db07e36e044b61b 100644
--- a/ee/lib/elastic/latest/snippet_class_proxy.rb
+++ b/ee/lib/elastic/latest/snippet_class_proxy.rb
@@ -17,6 +17,10 @@ module Elastic
         search(query_hash)
       end
 
+      def es_type
+        target.base_class.name.underscore
+      end
+
       private
 
       def filter(query_hash, user)
@@ -31,7 +35,10 @@ module Elastic
                   { terms: { project_id: authorized_project_ids_for_user(user) } },
                   {
                     bool: {
-                      filter: { terms: { visibility_level: [Snippet::PUBLIC, Snippet::INTERNAL] } },
+                      filter: [
+                        { terms: { visibility_level: [Snippet::PUBLIC, Snippet::INTERNAL] } },
+                        { term: { type: self.es_type } }
+                      ],
                       must_not: { exists: { field: 'project_id' } }
                     }
                   }
@@ -41,7 +48,10 @@ module Elastic
           else
             {
               bool: {
-                filter: { term: { visibility_level: Snippet::PUBLIC } },
+                filter: [
+                  { term: { visibility_level: Snippet::PUBLIC } },
+                  { term: { type: self.es_type } }
+                ],
                 must_not: { exists: { field: 'project_id' } }
               }
             }
diff --git a/ee/spec/lib/gitlab/elastic/snippet_search_results_spec.rb b/ee/spec/lib/gitlab/elastic/snippet_search_results_spec.rb
index e355d64d3541bf2f49116351ada9e8cf78138b23..86c3bf5f0811fa26afa03469f2991286fcb63827 100644
--- a/ee/spec/lib/gitlab/elastic/snippet_search_results_spec.rb
+++ b/ee/spec/lib/gitlab/elastic/snippet_search_results_spec.rb
@@ -3,7 +3,7 @@
 require 'spec_helper'
 
 describe Gitlab::Elastic::SnippetSearchResults, :elastic do
-  let(:snippet) { create(:snippet, content: 'foo', file_name: 'foo') }
+  let(:snippet) { create(:personal_snippet, content: 'foo', file_name: 'foo') }
   let(:results) { described_class.new(snippet.author, 'foo') }
 
   before do
@@ -43,7 +43,7 @@ describe Gitlab::Elastic::SnippetSearchResults, :elastic do
     end
 
     context 'when snippet is public' do
-      let(:snippet) { create(:snippet, :public, content: 'foo', file_name: 'foo') }
+      let(:snippet) { create(:personal_snippet, :public, content: 'foo', file_name: 'foo') }
 
       it 'returns public snippet' do
         expect(results.snippet_titles_count).to eq(1)
@@ -51,4 +51,14 @@ describe Gitlab::Elastic::SnippetSearchResults, :elastic do
       end
     end
   end
+
+  context 'when user has full_private_access' do
+    let(:user) { create(:admin) }
+    let(:results) { described_class.new(user, 'foo') }
+
+    it 'returns matched snippets' do
+      expect(results.snippet_titles_count).to eq(1)
+      expect(results.snippet_blobs_count).to eq(1)
+    end
+  end
 end