From c3a23a84594e7028b2e6b57dcb85d136546d02f0 Mon Sep 17 00:00:00 2001
From: Arturo Herrero <arturo.herrero@gmail.com>
Date: Wed, 2 Oct 2024 11:27:00 +0200
Subject: [PATCH] Elasticsearch: Reindex to remove title completion

We implemented search_as_you_type for merge request title completion
https://gitlab.com/gitlab-org/gitlab/-/merge_requests/167432, but the
production performance was not good.

We are removing the search_as_you_type field during the same milestone 17.5, so
we can skip the reindexing for self-managed instances.

Changelog: removed
EE: true
---
 ...dex_merge_requests_for_title_completion.yml | 10 ----------
 ...dex_merge_requests_for_title_completion.yml | 15 +++++++++++++++
 ...dex_merge_requests_for_title_completion.rb} |  6 +-----
 ee/lib/elastic/latest/config.rb                |  4 ----
 ee/lib/elastic/latest/merge_request_config.rb  |  3 +--
 ...erge_requests_for_title_completion_spec.rb} | 18 ++----------------
 6 files changed, 19 insertions(+), 37 deletions(-)
 delete mode 100644 ee/elastic/docs/20240920154436_reindex_merge_requests_for_title_completion.yml
 create mode 100644 ee/elastic/docs/20241002103536_reindex_merge_requests_for_title_completion.yml
 rename ee/elastic/migrate/{20240920154436_reindex_merge_requests_for_title_completion.rb => 20241002103536_reindex_merge_requests_for_title_completion.rb} (68%)
 rename ee/spec/elastic/migrate/{20240920154436_reindex_merge_requests_for_title_completion_spec.rb => 20241002103536_reindex_merge_requests_for_title_completion_spec.rb} (61%)

diff --git a/ee/elastic/docs/20240920154436_reindex_merge_requests_for_title_completion.yml b/ee/elastic/docs/20240920154436_reindex_merge_requests_for_title_completion.yml
deleted file mode 100644
index 3c0945c5cac5..000000000000
--- a/ee/elastic/docs/20240920154436_reindex_merge_requests_for_title_completion.yml
+++ /dev/null
@@ -1,10 +0,0 @@
----
-name: ReindexMergeRequestsForTitleCompletion
-version: '20240920154436'
-description: Reindex merge requests for title completion
-group: group::global search
-milestone: '17.5'
-introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/166751
-obsolete: false
-marked_obsolete_by_url:
-marked_obsolete_in_milestone:
diff --git a/ee/elastic/docs/20241002103536_reindex_merge_requests_for_title_completion.yml b/ee/elastic/docs/20241002103536_reindex_merge_requests_for_title_completion.yml
new file mode 100644
index 000000000000..17c3b84294f9
--- /dev/null
+++ b/ee/elastic/docs/20241002103536_reindex_merge_requests_for_title_completion.yml
@@ -0,0 +1,15 @@
+---
+name: ReindexMergeRequestsForTitleCompletion
+version: '20241002103536'
+description: Reindex merge requests for title completion
+group: group::global search
+milestone: '17.5'
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/167887
+obsolete: false
+marked_obsolete_by_url:
+marked_obsolete_in_milestone:
+skippable: true
+skip_condition: We implemented search_as_you_type for merge request title completion
+  https://gitlab.com/gitlab-org/gitlab/-/merge_requests/167432, but the production performance was not good.
+  We will remove the search_as_you_type field during the same milestone 17.5, so we can skip the reindexing for
+  self-managed instances.
diff --git a/ee/elastic/migrate/20240920154436_reindex_merge_requests_for_title_completion.rb b/ee/elastic/migrate/20241002103536_reindex_merge_requests_for_title_completion.rb
similarity index 68%
rename from ee/elastic/migrate/20240920154436_reindex_merge_requests_for_title_completion.rb
rename to ee/elastic/migrate/20241002103536_reindex_merge_requests_for_title_completion.rb
index 051241344009..5006716d32b3 100644
--- a/ee/elastic/migrate/20240920154436_reindex_merge_requests_for_title_completion.rb
+++ b/ee/elastic/migrate/20241002103536_reindex_merge_requests_for_title_completion.rb
@@ -1,7 +1,7 @@
 # frozen_string_literal: true
 
 class ReindexMergeRequestsForTitleCompletion < Elastic::Migration
-  space_requirements!
+  skip_if -> { !Gitlab::Saas.feature_available?(:advanced_search) }
 
   def migrate
     Elastic::ReindexingTask.create!(targets: %w[MergeRequest], options: { skip_pending_migrations_check: true })
@@ -10,8 +10,4 @@ def migrate
   def completed?
     true
   end
-
-  def space_required_bytes
-    3 * helper.index_size_bytes(index_name: MergeRequest.index_name)
-  end
 end
diff --git a/ee/lib/elastic/latest/config.rb b/ee/lib/elastic/latest/config.rb
index 2605fdc20847..1b00b652f574 100644
--- a/ee/lib/elastic/latest/config.rb
+++ b/ee/lib/elastic/latest/config.rb
@@ -31,10 +31,6 @@ module Config
                 tokenizer: 'standard',
                 filter: %w[word_delimiter_graph_filter asciifolding lowercase stemmer flatten_graph remove_duplicates]
               },
-              title_completion_analyzer: {
-                tokenizer: 'standard',
-                filter: %w[lowercase stop]
-              },
               default: {
                 tokenizer: 'standard',
                 filter: %w[lowercase stemmer]
diff --git a/ee/lib/elastic/latest/merge_request_config.rb b/ee/lib/elastic/latest/merge_request_config.rb
index 2ecfdbffb20f..f3931a72884b 100644
--- a/ee/lib/elastic/latest/merge_request_config.rb
+++ b/ee/lib/elastic/latest/merge_request_config.rb
@@ -21,8 +21,7 @@ module MergeRequestConfig
         indexes :id, type: :integer
         indexes :iid, type: :integer
 
-        indexes :title, type: :text, index_options: 'positions', analyzer: :title_analyzer,
-          fields: { completion: { type: :search_as_you_type, analyzer: :title_completion_analyzer } }
+        indexes :title, type: :text, index_options: 'positions', analyzer: :title_analyzer
         indexes :description, type: :text, index_options: 'positions', analyzer: :code_analyzer
         indexes :state, type: :keyword
         indexes :project_id, type: :integer
diff --git a/ee/spec/elastic/migrate/20240920154436_reindex_merge_requests_for_title_completion_spec.rb b/ee/spec/elastic/migrate/20241002103536_reindex_merge_requests_for_title_completion_spec.rb
similarity index 61%
rename from ee/spec/elastic/migrate/20240920154436_reindex_merge_requests_for_title_completion_spec.rb
rename to ee/spec/elastic/migrate/20241002103536_reindex_merge_requests_for_title_completion_spec.rb
index 30a660a686df..59f9d9c81f39 100644
--- a/ee/spec/elastic/migrate/20240920154436_reindex_merge_requests_for_title_completion_spec.rb
+++ b/ee/spec/elastic/migrate/20241002103536_reindex_merge_requests_for_title_completion_spec.rb
@@ -1,10 +1,10 @@
 # frozen_string_literal: true
 
 require 'spec_helper'
-require File.expand_path('ee/elastic/migrate/20240920154436_reindex_merge_requests_for_title_completion.rb')
+require File.expand_path('ee/elastic/migrate/20241002103536_reindex_merge_requests_for_title_completion.rb')
 
 RSpec.describe ReindexMergeRequestsForTitleCompletion, feature_category: :global_search do
-  let(:version) { 20240920154436 }
+  let(:version) { 20241002103536 }
   let(:migration) { described_class.new(version) }
 
   it 'does not have migration options set', :aggregate_failures do
@@ -26,18 +26,4 @@
       expect(migration.completed?).to eq(true)
     end
   end
-
-  describe '#space_required_bytes' do
-    let(:helper) { ::Gitlab::Elastic::Helper.default }
-    let(:space_required_bytes) { migration.space_required_bytes }
-
-    before do
-      allow(::Gitlab::Elastic::Helper).to receive(:default).and_return(helper)
-      allow(helper).to receive(:index_size_bytes).with(index_name: MergeRequest.index_name).and_return(1_000)
-    end
-
-    it 'returns space required' do
-      expect(space_required_bytes).to eq(3_000)
-    end
-  end
 end
-- 
GitLab