diff --git a/app/controllers/concerns/group_tree.rb b/app/controllers/concerns/group_tree.rb
index c5cf336463a692b2abd15a91072006f6d5fbb2e3..9104d4a32cf201a448203893b58bf7c07da6c7db 100644
--- a/app/controllers/concerns/group_tree.rb
+++ b/app/controllers/concerns/group_tree.rb
@@ -2,7 +2,7 @@ module GroupTree
   def render_group_tree(groups)
     if params[:filter].present?
       @groups = Gitlab::GroupHierarchy.new(groups).all_groups
-      @groups = @groups.search(params[:filter])
+      @groups = Gitlab::GroupHierarchy.new(@groups.search(params[:filter])).base_and_ancestors
     else
       # Only show root groups if no parent-id is given
       @groups = groups.where(parent_id: params[:parent_id])
diff --git a/spec/controllers/concerns/group_tree_spec.rb b/spec/controllers/concerns/group_tree_spec.rb
index 5d4fb66b492460713affc14da2887a96a8f25b13..2fe041a5eccea348f3f612beb48f9463512049ed 100644
--- a/spec/controllers/concerns/group_tree_spec.rb
+++ b/spec/controllers/concerns/group_tree_spec.rb
@@ -45,12 +45,12 @@ describe GroupTree do
         expect(assigns(:groups)).to contain_exactly(subgroup)
       end
 
-      it 'allows filtering for subgroups' do
+      it 'allows filtering for subgroups and includes the parents for rendering' do
         subgroup = create(:group, :public, parent: group, name: 'filter')
 
         get :index, filter: 'filt', format: :json
 
-        expect(assigns(:groups)).to contain_exactly(subgroup)
+        expect(assigns(:groups)).to contain_exactly(group, subgroup)
       end
     end