diff --git a/.rubocop_todo/search/namespaced_class.yml b/.rubocop_todo/search/namespaced_class.yml
index 96188fad576b30376854573c9bdf35a19ac18b66..e60b1c9fdeb13a0f2975705d3dbaef92d5e15fa4 100644
--- a/.rubocop_todo/search/namespaced_class.yml
+++ b/.rubocop_todo/search/namespaced_class.yml
@@ -158,7 +158,6 @@ Search/NamespacedClass:
     - 'ee/lib/gem_extensions/elasticsearch/model/client.rb'
     - 'ee/lib/gem_extensions/elasticsearch/model/indexing/instance_methods.rb'
     - 'ee/lib/gem_extensions/elasticsearch/model/response/records.rb'
-    - 'ee/lib/gitlab/elastic/bool_expr.rb'
     - 'ee/lib/gitlab/elastic/bulk_indexer.rb'
     - 'ee/lib/gitlab/elastic/client.rb'
     - 'ee/lib/gitlab/elastic/document_reference.rb'
diff --git a/ee/lib/elastic/latest/git_class_proxy.rb b/ee/lib/elastic/latest/git_class_proxy.rb
index 5f8d68f81cde43fb6eaeeeca017cd98fe5e6ebd5..b17f78ab810bce62dd7c81d38722b08b10eaddde 100644
--- a/ee/lib/elastic/latest/git_class_proxy.rb
+++ b/ee/lib/elastic/latest/git_class_proxy.rb
@@ -109,7 +109,7 @@ def search_commit(query, page: 1, per: 20, options: {})
         fields = %w[message^10 sha^5 author.name^2 author.email^2 committer.name committer.email]
         query_with_prefix = query.split(/\s+/).map { |s| s.gsub(SHA_REGEX) { |sha| "#{sha}*" } }.join(' ')
 
-        bool_expr = ::Gitlab::Elastic::BoolExpr.new
+        bool_expr = ::Search::Elastic::BoolExpr.new
 
         options[:no_join_project] = true
         options[:index_name] = Elastic::Latest::CommitConfig.index_name
@@ -284,7 +284,7 @@ def blob_query(query, type: 'blob', page: 1, per: 20, options: {})
           filter :blob, field: :oid
         end
 
-        bool_expr = ::Gitlab::Elastic::BoolExpr.new
+        bool_expr = ::Search::Elastic::BoolExpr.new
         count_or_aggregation_query = count_only || aggregation
         query_hash = {
           query: { bool: bool_expr },
diff --git a/ee/lib/gitlab/elastic/bool_expr.rb b/ee/lib/search/elastic/bool_expr.rb
similarity index 97%
rename from ee/lib/gitlab/elastic/bool_expr.rb
rename to ee/lib/search/elastic/bool_expr.rb
index e6df5e98ee7c569bbf399e7af7e182b9abde089b..047c0950ed5c07bbdae4fad55d7ebdec1fe35b23 100644
--- a/ee/lib/gitlab/elastic/bool_expr.rb
+++ b/ee/lib/search/elastic/bool_expr.rb
@@ -1,6 +1,6 @@
 # frozen_string_literal: true
 
-module Gitlab
+module Search
   module Elastic
     BoolExpr = Struct.new(:must, :must_not, :should, :filter, :minimum_should_match) do # rubocop:disable Lint/StructNewOverride -- existing implementation
       def initialize
diff --git a/ee/lib/search/elastic/queries.rb b/ee/lib/search/elastic/queries.rb
index 9babfd93d4006dbe6901263afc6666bec91c4821..fdfce5630a211de3a1348c59973dd32d5ec50e31 100644
--- a/ee/lib/search/elastic/queries.rb
+++ b/ee/lib/search/elastic/queries.rb
@@ -13,7 +13,7 @@ class << self
         include Search::Elastic::Concerns::RateLimiter
 
         def by_iid(iid:, doc_type:)
-          bool_expr = Gitlab::Elastic::BoolExpr.new
+          bool_expr = ::Search::Elastic::BoolExpr.new
           bool_expr.filter = [
             { term: { iid: { _name: context.name(doc_type, :related, :iid), value: iid } } },
             { term: { type: { _name: context.name(:doc, :is_a, doc_type), value: doc_type } } }
@@ -30,10 +30,10 @@ def by_multi_match_query(fields:, query:, options:)
           fields = ::Elastic::Latest::CustomLanguageAnalyzers.add_custom_analyzers_fields(fields)
           fields = remove_fields_boost(fields) if options[:count_only]
 
-          bool_expr = Gitlab::Elastic::BoolExpr.new
+          bool_expr = ::Search::Elastic::BoolExpr.new
 
           if query.present?
-            bool_expr = Gitlab::Elastic::BoolExpr.new
+            bool_expr = ::Search::Elastic::BoolExpr.new
             unless options[:no_join_project]
               bool_expr.filter << {
                 term: {
@@ -45,7 +45,7 @@ def by_multi_match_query(fields:, query:, options:)
               }
             end
 
-            multi_match_bool = Gitlab::Elastic::BoolExpr.new
+            multi_match_bool = ::Search::Elastic::BoolExpr.new
             multi_match_bool.should << multi_match_query(fields, query, options.merge(operator: :or))
             multi_match_bool.should << multi_match_query(fields, query, options.merge(operator: :and))
             multi_match_bool.should << multi_match_phrase_query(fields, query, options)
@@ -72,7 +72,7 @@ def by_simple_query_string(fields:, query:, options:)
           fields = ::Elastic::Latest::CustomLanguageAnalyzers.add_custom_analyzers_fields(fields)
           fields = remove_fields_boost(fields) if options[:count_only]
 
-          bool_expr = Gitlab::Elastic::BoolExpr.new
+          bool_expr = ::Search::Elastic::BoolExpr.new
           if query.present?
             unless options[:no_join_project]
               bool_expr.filter << {
diff --git a/ee/spec/lib/gitlab/elastic/bool_expr_spec.rb b/ee/spec/lib/search/elastic/bool_expr_spec.rb
similarity index 97%
rename from ee/spec/lib/gitlab/elastic/bool_expr_spec.rb
rename to ee/spec/lib/search/elastic/bool_expr_spec.rb
index fc89c3ab90189403c6c31ebd425bdd376d40ecd9..183f37d640d600c71ed2c209f65eafee6fd39f95 100644
--- a/ee/spec/lib/gitlab/elastic/bool_expr_spec.rb
+++ b/ee/spec/lib/search/elastic/bool_expr_spec.rb
@@ -2,7 +2,7 @@
 
 require 'spec_helper'
 
-RSpec.describe ::Gitlab::Elastic::BoolExpr, feature_category: :global_search do
+RSpec.describe ::Search::Elastic::BoolExpr, feature_category: :global_search do
   subject(:bool_expr) { described_class.new }
 
   it 'sets defaults', :aggregate_failures do