diff --git a/app/models/note.rb b/app/models/note.rb index 54e7389136f9f6821a6439d815b24bac894d6d72..b9b884b88c5ccb26736e3a2100a5c989593571a9 100644 --- a/app/models/note.rb +++ b/app/models/note.rb @@ -172,7 +172,6 @@ class Note < ApplicationRecord project: [:project_members, :namespace, { group: [:group_members] }]) end scope :with_metadata, -> { includes(:system_note_metadata) } - scope :with_web_entity_associations, -> { preload(:project, :author, :noteable) } scope :for_note_or_capitalized_note, ->(text) { where(note: [text, text.capitalize]) } scope :like_note_or_capitalized_note, ->(text) { where('(note LIKE ? OR note LIKE ?)', text, text.capitalize) } @@ -291,6 +290,10 @@ def simple_sorts def cherry_picked_merge_requests(shas) where(noteable_type: 'MergeRequest', commit_id: shas).select(:noteable_id) end + + def with_web_entity_associations + preload(:project, :author, :noteable) + end end # rubocop: disable CodeReuse/ServiceClass diff --git a/ee/app/models/ee/note.rb b/ee/app/models/ee/note.rb index d69bd11eb283b0f0e29ab9079893591faffdf7f1..d03b5320eb8a655215a676c3d8a6e6a72494d31d 100644 --- a/ee/app/models/ee/note.rb +++ b/ee/app/models/ee/note.rb @@ -19,10 +19,17 @@ module Note end class_methods do - # override + extend ::Gitlab::Utils::Override + + override :use_separate_indices? def use_separate_indices? true end + + override :with_web_entity_associations + def with_web_entity_associations + super.preload(project: [:group, { namespace: :route }]) + end end # Original method in Elastic::ApplicationSearch diff --git a/ee/spec/requests/search_controller_spec.rb b/ee/spec/requests/search_controller_spec.rb index 6b5af914885fd0b58294c64282c2ac0b14ed6620..fdebb13a6cfcd80ef55599c2d9c556c3eb3ecdd2 100644 --- a/ee/spec/requests/search_controller_spec.rb +++ b/ee/spec/requests/search_controller_spec.rb @@ -48,8 +48,8 @@ def send_search_request(params) context 'for issues scope' do let(:object) { :issue } - let(:creation_args) { { project: project } } - let(:params) { { search: '*', scope: 'issues' } } + let(:creation_args) { { project: project, title: 'foo' } } + let(:params) { { search: 'foo', scope: 'issues' } } # some N+1 queries still exist # each issue runs an extra query for project routes let(:threshold) { 4 } @@ -60,8 +60,8 @@ def send_search_request(params) context 'for merge_request scope' do let(:creation_traits) { [:unique_branches] } let(:object) { :merge_request } - let(:creation_args) { { source_project: project } } - let(:params) { { search: '*', scope: 'merge_requests' } } + let(:creation_args) { { source_project: project, title: 'foo' } } + let(:params) { { search: 'foo', scope: 'merge_requests' } } # some N+1 queries still exist # each merge request runs an extra query for project routes let(:threshold) { 4 } @@ -72,8 +72,8 @@ def send_search_request(params) context 'for project scope' do let(:creation_traits) { [:public] } let(:object) { :project } - let(:creation_args) { {} } - let(:params) { { search: '*', scope: 'projects' } } + let(:creation_args) { { name: 'foo' } } + let(:params) { { search: 'foo', scope: 'projects' } } # some N+1 queries still exist # each project requires 3 extra queries # - one count for forks @@ -90,11 +90,9 @@ def send_search_request(params) context 'for notes scope' do let(:creation_traits) { [:on_commit] } let(:object) { :note } - let(:creation_args) { { project: project } } - let(:params) { { search: '*', scope: 'notes' } } - # some N+1 still exist - # each project makes and extra call to get the namespace routes - let(:threshold) { 6 } + let(:creation_args) { { project: project, note: 'foo' } } + let(:params) { { search: 'foo', scope: 'notes' } } + let(:threshold) { 0 } it_behaves_like 'an efficient database result' end @@ -102,7 +100,7 @@ def send_search_request(params) context 'for milestones scope' do let(:object) { :milestone } let(:creation_args) { { project: project } } - let(:params) { { search: '*', scope: 'milestones' } } + let(:params) { { search: 'title', scope: 'milestones' } } let(:threshold) { 0 } it_behaves_like 'an efficient database result'