diff --git a/.rubocop_todo/rspec/named_subject.yml b/.rubocop_todo/rspec/named_subject.yml
index efbb4c5d9d0bf2e371bb99573c95a5d36f0f1073..2c545b19767bc3f5398c1bfb73352e68ac30670d 100644
--- a/.rubocop_todo/rspec/named_subject.yml
+++ b/.rubocop_todo/rspec/named_subject.yml
@@ -329,7 +329,6 @@ RSpec/NamedSubject:
     - 'ee/spec/lib/elastic/latest/application_instance_proxy_spec.rb'
     - 'ee/spec/lib/elastic/latest/epic_class_proxy_spec.rb'
     - 'ee/spec/lib/elastic/latest/epic_instance_proxy_spec.rb'
-    - 'ee/spec/lib/elastic/latest/git_class_proxy_add_suffix_project_in_wiki_rid_running_wiki_search_spec.rb'
     - 'ee/spec/lib/elastic/latest/git_class_proxy_spec.rb'
     - 'ee/spec/lib/elastic/latest/git_instance_proxy_spec.rb'
     - 'ee/spec/lib/elastic/latest/issue_class_proxy_spec.rb'
diff --git a/ee/elastic/docs/20230428500000_add_suffix_project_in_wiki_rid.yml b/ee/elastic/docs/20230428500000_add_suffix_project_in_wiki_rid.yml
index 8c96ed09b4854eaef5433c239140d3ca699d89ef..7a9fd5b1402b2aa6b6ebcd22dbcf5ebcad45e744 100644
--- a/ee/elastic/docs/20230428500000_add_suffix_project_in_wiki_rid.yml
+++ b/ee/elastic/docs/20230428500000_add_suffix_project_in_wiki_rid.yml
@@ -5,6 +5,6 @@ description: AddSuffixProjectInWikiRid
 group: group::global search
 milestone: '16.0'
 introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/119261
-obsolete: false
-marked_obsolete_by_url:
-marked_obsolete_in_milestone:
+obsolete: true
+marked_obsolete_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/152979
+marked_obsolete_in_milestone: '17.1'
diff --git a/ee/elastic/migrate/20230428500000_add_suffix_project_in_wiki_rid.rb b/ee/elastic/migrate/20230428500000_add_suffix_project_in_wiki_rid.rb
index bf3b3d2260063dddf457851d23affb49350b21df..c74af4441037d8a6b267153b8f8d4e06c85c2f9f 100644
--- a/ee/elastic/migrate/20230428500000_add_suffix_project_in_wiki_rid.rb
+++ b/ee/elastic/migrate/20230428500000_add_suffix_project_in_wiki_rid.rb
@@ -113,3 +113,5 @@ def process_already_started_task(task_id, slice)
     end
   end
 end
+
+AddSuffixProjectInWikiRid.prepend ::Elastic::MigrationObsolete
diff --git a/ee/lib/elastic/latest/git_instance_proxy.rb b/ee/lib/elastic/latest/git_instance_proxy.rb
index d710df8a9425660866ac075555538aa4954cd7bf..a45b2148653134df7808d88c13723d83c101a8f5 100644
--- a/ee/lib/elastic/latest/git_instance_proxy.rb
+++ b/ee/lib/elastic/latest/git_instance_proxy.rb
@@ -34,7 +34,6 @@ def blob_aggregations(query, options)
 
       # If is_wiki is true then set index as (#{env}-wikis)
       # rid as (wiki_project_#{id}) for ProjectWiki and (wiki_group_#{id}) for GroupWiki
-      # If add_suffix_project_in_wiki_rid has not finished then rid might not have prefix(project/group) then
       # run delete_query_by_rid with sending rid as 'wiki_#{project_id}'
       def delete_index_for_commits_and_blobs(is_wiki: false)
         types = is_wiki ? %w[wiki_blob] : %w[commit blob]
@@ -47,10 +46,6 @@ def delete_index_for_commits_and_blobs(is_wiki: false)
                        end
 
           response = delete_query_by_rid(index, rid, is_wiki)
-          # Consider to delete wikis by older rid(without suffix _project) as well
-          if is_wiki && project_id && !::Elastic::DataMigrationService.migration_has_finished?(:add_suffix_project_in_wiki_rid)
-            response = delete_query_by_rid(index, "wiki_#{project_id}", is_wiki)
-          end
 
           return response if is_wiki # if condition can be removed once the blob gets migrated to the separate index
         end
diff --git a/ee/lib/elastic/latest/wiki_instance_proxy.rb b/ee/lib/elastic/latest/wiki_instance_proxy.rb
index 7ba2a58950590f8bec120190b19f2c72b0790431..4f411b8f4707a74b1b3907d91ac3885ed5367916 100644
--- a/ee/lib/elastic/latest/wiki_instance_proxy.rb
+++ b/ee/lib/elastic/latest/wiki_instance_proxy.rb
@@ -18,11 +18,7 @@ def elastic_search_as_wiki_page(query, page: 1, per: 20, options: {})
       private
 
       def repository_id
-        if ::Elastic::DataMigrationService.migration_has_finished?(:add_suffix_project_in_wiki_rid)
-          "wiki_project_#{project.id}"
-        else
-          "wiki_#{project.id}"
-        end
+        "wiki_project_#{project.id}"
       end
     end
   end
diff --git a/ee/spec/elastic/migrate/20230428500000_add_suffix_project_in_wiki_rid_spec.rb b/ee/spec/elastic/migrate/20230428500000_add_suffix_project_in_wiki_rid_spec.rb
index 7de27037acf26025e5470f1677bfdfeedfb28727..66bdd747e828b10cde4d8adb111ea017efbb9bf1 100644
--- a/ee/spec/elastic/migrate/20230428500000_add_suffix_project_in_wiki_rid_spec.rb
+++ b/ee/spec/elastic/migrate/20230428500000_add_suffix_project_in_wiki_rid_spec.rb
@@ -4,241 +4,5 @@
 require File.expand_path('ee/elastic/migrate/20230428500000_add_suffix_project_in_wiki_rid.rb')
 
 RSpec.describe AddSuffixProjectInWikiRid, :elastic_clean, :sidekiq_inline, feature_category: :global_search do
-  let(:version) { 20230428500000 }
-  let(:migration) { described_class.new(version) }
-  let(:helper) { Gitlab::Elastic::Helper.new }
-  let(:client) { ::Gitlab::Search::Client.new }
-
-  before do
-    stub_ee_application_setting(elasticsearch_search: true, elasticsearch_indexing: true)
-    allow(migration).to receive(:helper).and_return(helper)
-    set_elasticsearch_migration_to :add_suffix_project_in_wiki_rid, including: false
-    allow(migration).to receive(:client).and_return(client)
-  end
-
-  describe 'migration_options' do
-    it 'has migration options set', :aggregate_failures do
-      expect(migration).to be_batched
-      expect(migration.throttle_delay).to eq(1.minute)
-      expect(migration).to be_pause_indexing
-      expect(migration).to be_space_requirements
-    end
-  end
-
-  describe '.migrate' do
-    context 'for batch run' do
-      it 'sets migration_state task_id' do
-        migration.migrate
-
-        expect(migration.migration_state).to include(slice: 0, max_slices: 5)
-        expect(migration.migration_state['task_id']).not_to be nil
-      end
-
-      it 'sets correct number of slices for 1 shard' do
-        allow(migration).to receive(:get_number_of_shards).and_return(1)
-
-        migration.migrate
-
-        expect(migration.migration_state).to include(slice: 0, max_slices: 2)
-      end
-
-      it 'sets next slice and clears task_id after task check' do
-        allow(migration).to receive(:reindexing_completed?).and_return(true)
-
-        migration.set_migration_state(slice: 0, max_slices: 5, retry_attempt: 0, task_id: 'task_id')
-
-        migration.migrate
-
-        expect(migration.migration_state).to include(slice: 1, max_slices: 5, task_id: nil)
-      end
-
-      it 'resets retry_attempt clears task_id for the next slice' do
-        allow(migration).to receive(:reindexing_completed?).and_return(true)
-
-        migration.set_migration_state(slice: 0, max_slices: 5, retry_attempt: 5, task_id: 'task_id')
-
-        migration.migrate
-
-        expect(migration.migration_state).to match(slice: 1, max_slices: 5, retry_attempt: 0, task_id: nil)
-      end
-
-      context 'when reindexing is still in progress' do
-        before do
-          allow(migration).to receive(:reindexing_completed?).and_return(false)
-        end
-
-        it 'does nothing' do
-          migration.set_migration_state(slice: 0, max_slices: 5, retry_attempt: 0, task_id: 'task_id')
-
-          migration.migrate
-
-          expect(client).not_to receive(:update_by_query)
-        end
-      end
-
-      context 'with wikis in elastic' do
-        # Create wikis on different projects to ensure they are spread across
-        # all shards. If they all end up in 1 ES shard then they'll be migrated
-        # in a single slice.
-        let_it_be(:projects) { create_list(:project, 3, :wiki_repo, visibility_level: 0, wiki_access_level: 0) }
-
-        before do
-          projects.each do |project|
-            project.wiki.create_page('index_page', 'Bla bla term')
-            project.wiki.create_page('home_page', 'Bla bla term2')
-            project.wiki.index_wiki_blobs
-          end
-          ensure_elasticsearch_index! # ensure objects are indexed
-        end
-
-        it 'migrates all wikis' do
-          slices = 2
-          migration.set_migration_state(slice: 0, max_slices: slices, retry_attempt: 0)
-          migration.migrate
-
-          10.times do
-            break if migration.completed?
-
-            migration.migrate
-          end
-          expect(migration.completed?).to be_truthy
-          expect(client.search(index: "#{es_helper.target_name}-wikis")['hits']['hits'].map do |hit|
-            hit['_source']['rid'].match(/wiki_project_[0-9].*/)
-          end.all?).to be true
-        end
-      end
-    end
-
-    context 'for failed run' do
-      context 'if exception is raised' do
-        before do
-          allow(migration).to receive(:client).and_return(client)
-          allow(client).to receive(:update_by_query).and_raise(StandardError)
-        end
-
-        it 'increases retry_attempt and clears task_id' do
-          migration.set_migration_state(slice: 0, max_slices: 2, retry_attempt: 1)
-
-          expect { migration.migrate }.to raise_error(StandardError)
-          expect(migration.migration_state).to match(slice: 0, max_slices: 2, retry_attempt: 2, task_id: nil)
-        end
-
-        it 'fails the migration after too many attempts' do
-          migration.set_migration_state(slice: 0, max_slices: 2, retry_attempt: 30)
-
-          migration.migrate
-
-          expect(migration.migration_state).to match(
-            slice: 0,
-            max_slices: 2,
-            retry_attempt: 30,
-            halted: true,
-            failed: true,
-            halted_indexing_unpaused: false
-          )
-          expect(client).not_to receive(:update_by_query)
-        end
-      end
-
-      context 'when elasticsearch failures' do
-        context 'if total is not equal' do
-          before do
-            allow(helper).to receive(:task_status).and_return(
-              {
-                "completed" => true,
-                "response" => {
-                  "total" => 60, "updated" => 0, "created" => 45, "deleted" => 0, "failures" => []
-                }
-              }
-            )
-          end
-
-          it 'raises an error and clears task_id' do
-            migration.set_migration_state(slice: 0, max_slices: 2, retry_attempt: 0, task_id: 'task_id')
-
-            expect { migration.migrate }.to raise_error(/total is not equal/)
-            expect(migration.migration_state[:task_id]).to be_nil
-          end
-        end
-
-        context 'when reindexing fails' do
-          before do
-            allow(helper).to receive(:task_status).with(task_id: 'task_id').and_return(
-              {
-                "completed" => true,
-                "response" => {
-                  "total" => 60,
-                  "updated" => 0,
-                  "created" => 0,
-                  "deleted" => 0,
-                  "failures" => [
-                    { type: "es_rejected_execution_exception" }
-                  ]
-                }
-              }
-            )
-          end
-
-          it 'raises an error and clears task_id' do
-            migration.set_migration_state(slice: 0, max_slices: 2, retry_attempt: 0, task_id: 'task_id')
-
-            expect { migration.migrate }.to raise_error(/failed with/)
-            expect(migration.migration_state[:task_id]).to be_nil
-          end
-        end
-      end
-    end
-  end
-
-  describe '.completed?' do
-    subject { migration.completed? }
-
-    let_it_be(:project) { create(:project, :wiki_repo, visibility_level: 0, wiki_access_level: 0) }
-
-    before do
-      project.wiki.create_page('index_page', 'Bla bla term')
-      project.wiki.index_wiki_blobs
-      ensure_elasticsearch_index! # ensure objects are indexed
-    end
-
-    context 'when there are no items which are missing project prefix in rid' do
-      before do
-        client.update_by_query(index: Elastic::Latest::WikiConfig.index_name,
-          body: {
-            script: { lang: 'painless',
-                      source: "ctx._source.rid = ctx._source.rid.replace('wiki', 'wiki_project')" }
-          }
-        )
-      end
-
-      it 'returns true' do
-        is_expected.to be_truthy
-      end
-    end
-
-    context 'when some items are missing project prefix in rid' do
-      before do
-        client.update_by_query(index: Elastic::Latest::WikiConfig.index_name,
-          body: {
-            script: { lang: 'painless',
-                      source: "ctx._source.rid = ctx._source.rid.replace('wiki_project', 'wiki')" }
-          }
-        )
-      end
-
-      it 'returns false' do
-        is_expected.to be_falsey
-      end
-    end
-  end
-
-  describe 'space_required_bytes' do
-    subject { migration.space_required_bytes }
-
-    before do
-      allow(helper).to receive(:index_size_bytes).and_return(300)
-    end
-
-    it { is_expected.to eq(3) }
-  end
+  it_behaves_like 'a deprecated Advanced Search migration', 20230428500000
 end
diff --git a/ee/spec/lib/elastic/latest/git_class_proxy_add_suffix_project_in_wiki_rid_running_wiki_search_spec.rb b/ee/spec/lib/elastic/latest/git_class_proxy_add_suffix_project_in_wiki_rid_running_wiki_search_spec.rb
deleted file mode 100644
index eac9bcb98e57a7efa33d536f992f59a70b667520..0000000000000000000000000000000000000000
--- a/ee/spec/lib/elastic/latest/git_class_proxy_add_suffix_project_in_wiki_rid_running_wiki_search_spec.rb
+++ /dev/null
@@ -1,51 +0,0 @@
-# frozen_string_literal: true
-
-# This spec file can be removed once the migration add_suffix_project_in_wiki_rid is deprecated
-require 'spec_helper'
-
-RSpec.describe Elastic::Latest::GitClassProxy, :elastic, :sidekiq_inline, feature_category: :global_search do
-  let_it_be(:wiki_project) { create(:project, :wiki_repo) }
-  let(:included_class) { Elastic::Latest::WikiClassProxy }
-
-  subject { included_class.new(wiki_project.wiki.class, use_separate_indices: ProjectWiki.use_separate_indices?) }
-
-  it 'fetches the results considering new and old format of rid' do
-    stub_ee_application_setting(elasticsearch_search: true, elasticsearch_indexing: true)
-    set_elasticsearch_migration_to(:add_suffix_project_in_wiki_rid, including: false)
-
-    wiki_project.wiki.create_page('home_page', 'Bla bla term')
-    wiki_project.wiki.create_page('home_page2', 'Bla bla term')
-    wiki_project.wiki.index_wiki_blobs
-
-    ensure_elasticsearch_index!
-
-    # Remove the project from the rid in one document
-    # It simulates a situtation where rid of some wiki blobs are already updated
-    remove_project_from_wiki_blob_rid
-
-    options = { repository_id: "wiki_project_#{wiki_project.id}" }
-
-    results = subject.elastic_search('Bla', type: 'wiki_blob', options: options)[:wiki_blobs][:results]
-
-    expect(results.total).to eq(2)
-    result_rids = results.as_json.map { |r| r['_source']['rid'] }
-    expect(result_rids).to include("wiki_project_#{wiki_project.id}", "wiki_#{wiki_project.id}")
-  end
-
-  def remove_project_from_wiki_blob_rid
-    Project.__elasticsearch__.client.update_by_query({
-      index: Elastic::Latest::WikiConfig.index_name, refresh: true, max_docs: 1,
-      body: {
-        script: {
-          lang: 'painless',
-          source: "ctx._source.rid = ctx._source.rid.replace('wiki_project', 'wiki')"
-        },
-        query: {
-          regexp: {
-            rid: "wiki_project_[0-9].*"
-          }
-        }
-      }
-    })
-  end
-end
diff --git a/ee/spec/lib/elastic/latest/wiki_instance_proxy_spec.rb b/ee/spec/lib/elastic/latest/wiki_instance_proxy_spec.rb
index be9ca49fef62e93174b8424d9d9ecbc0799b7a81..b606668a2cbd0207b7b3c07856b03df9f89138c0 100644
--- a/ee/spec/lib/elastic/latest/wiki_instance_proxy_spec.rb
+++ b/ee/spec/lib/elastic/latest/wiki_instance_proxy_spec.rb
@@ -18,7 +18,7 @@
 
     it 'provides repository_id if not provided' do
       expected_params = params.deep_dup
-      expected_params[:options][:repository_id] = "wiki_#{project.id}"
+      expected_params[:options][:repository_id] = "wiki_project_#{project.id}"
 
       expect(subject.class).to receive(:elastic_search_as_wiki_page).with('foo', expected_params)