diff --git a/doc/api/search.md b/doc/api/search.md index ff044079e03264c10051e15c090b24933f554685..cec57e763528271e668dd57e13a1b83c4802f5a0 100644 --- a/doc/api/search.md +++ b/doc/api/search.md @@ -21,6 +21,9 @@ these additional scopes are available for the [advanced search](#advanced-search - `blobs` - `notes` +If you want to use basic search instead, see +[specify a search type](../user/search/index.md#specify-a-search-type). + ## Advanced search API Search for a [term](../user/search/advanced_search.md#syntax) across the entire GitLab instance. diff --git a/doc/user/search/exact_code_search.md b/doc/user/search/exact_code_search.md index bffbd273df8d42faadef028a90d4aad10f351547..99280226b7d14eb24e471822811988765b67fae0 100644 --- a/doc/user/search/exact_code_search.md +++ b/doc/user/search/exact_code_search.md @@ -43,7 +43,8 @@ For more information, see the history. This feature is available for testing, but not ready for production use. With the Zoekt search API, you can use the [search API](../../api/search.md) for exact code search. -When this feature is disabled, [advanced search](advanced_search.md) or [basic search](index.md) is used instead. +If you want to use [advanced search](advanced_search.md) or basic search instead, see +[specify a search type](index.md#specify-a-search-type). By default, the Zoekt search API is disabled on GitLab.com to avoid breaking changes. To request access to this feature, contact GitLab. diff --git a/doc/user/search/index.md b/doc/user/search/index.md index 8362d2e2051549e03a84f8dadcedc40a5ff502e8..5fd5376e2ce2fe11f2ec17eb2c09a9a4e476f7f4 100644 --- a/doc/user/search/index.md +++ b/doc/user/search/index.md @@ -21,8 +21,18 @@ For code search, GitLab uses these types in this order: or when you search against a non-default branch. This type does not support group or global search. -When exact code search or advanced search is enabled, you can still use -basic search by specifying the `basic_search=true` URL parameter. +## Specify a search type + +> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/161999) in GitLab 17.4. + +To specify a search type, set the `search_type` URL parameter as follows: + +- `search_type=zoekt` for [exact code search](exact_code_search.md) +- `search_type=advanced` for [advanced search](advanced_search.md) +- `search_type=basic` for basic search + +`search_type` replaces the deprecated `basic_search` parameter. +For more information, see [issue 477333](https://gitlab.com/gitlab-org/gitlab/-/issues/477333). ## Global search scopes diff --git a/ee/app/services/concerns/search/elasticsearchable.rb b/ee/app/services/concerns/search/elasticsearchable.rb index 35a7de0c46382a2909b99c2134739858554c875a..c103b05e0ede887cb4c25b7c8daeaf7d5771065d 100644 --- a/ee/app/services/concerns/search/elasticsearchable.rb +++ b/ee/app/services/concerns/search/elasticsearchable.rb @@ -5,8 +5,6 @@ module Elasticsearchable SCOPES_ADVANCED_SEARCH_ALWAYS_ENABLED = %w[users].freeze def use_elasticsearch? - return false if params[:basic_search] - ::Gitlab::CurrentSettings.search_using_elasticsearch?(scope: elasticsearchable_scope) end diff --git a/ee/app/services/concerns/search/zoekt_searchable.rb b/ee/app/services/concerns/search/zoekt_searchable.rb index 21b37554b12cda50fc4753c487284b963cadf6d4..3acb1becc86a48d2a4ba05a2a2d84552475156a4 100644 --- a/ee/app/services/concerns/search/zoekt_searchable.rb +++ b/ee/app/services/concerns/search/zoekt_searchable.rb @@ -5,7 +5,7 @@ module ZoektSearchable def use_zoekt? # TODO: rename to search_code_with_zoekt? # https://gitlab.com/gitlab-org/gitlab/-/issues/421619 - return false if params[:basic_search] || skip_api? + return false if skip_api? return false unless ::Search::Zoekt.enabled_for_user?(current_user) && zoekt_searchable_scope? return false if Feature.enabled?(:disable_zoekt_search_for_saas, root_ancestor) diff --git a/ee/spec/controllers/ee/search_controller_spec.rb b/ee/spec/controllers/ee/search_controller_spec.rb index ef67393c3132d89d45c14639e763c2a7af5154bf..ab67fc2c0e05275cdf917ab0b5d5d17a70abb0df 100644 --- a/ee/spec/controllers/ee/search_controller_spec.rb +++ b/ee/spec/controllers/ee/search_controller_spec.rb @@ -374,7 +374,7 @@ def request expect(payload[:metadata]['meta.search.type']).to eq(search_type) end - get :show, params: { search: 'hello world', basic_search: true } + get :show, params: { search: 'hello world', search_type: search_type } end end end diff --git a/ee/spec/services/concerns/search/elasticsearchable_spec.rb b/ee/spec/services/concerns/search/elasticsearchable_spec.rb index c1fbc35dfa7b46564d8cdfbfba0af2483ba0d412..9fe01622e268022bd14407757ab318cd86bff0b3 100644 --- a/ee/spec/services/concerns/search/elasticsearchable_spec.rb +++ b/ee/spec/services/concerns/search/elasticsearchable_spec.rb @@ -33,14 +33,6 @@ def elasticsearchable_scope allow(Gitlab::CurrentSettings).to receive(:search_using_elasticsearch?).and_return(true) end - context 'when basic_search param is passed in' do - let(:params) { { basic_search: true } } - - it 'is false' do - expect(class_instance).not_to be_use_elasticsearch - end - end - context 'when scope is epics' do let(:params) { { scope: 'epics' } } diff --git a/ee/spec/services/search/group_service_spec.rb b/ee/spec/services/search/group_service_spec.rb index c5354ac01356f3f87ca120b70e626ac3718daf2a..449ff3683342371ca3046a2aab2700b6e7fafd41 100644 --- a/ee/spec/services/search/group_service_spec.rb +++ b/ee/spec/services/search/group_service_spec.rb @@ -142,14 +142,12 @@ context 'when searching with Zoekt', :zoekt_settings_enabled do let(:service) do - described_class.new(user, group, search: 'foobar', scope: scope, - basic_search: basic_search, page: page, source: source) + described_class.new(user, group, search: 'foobar', scope: scope, page: page, source: source) end let(:source) { nil } let(:use_zoekt) { true } let(:scope) { 'blobs' } - let(:basic_search) { nil } let(:page) { nil } let(:zoekt_nodes) { create_list(:zoekt_node, 2) } let(:circuit_breaker) { instance_double(::Search::Zoekt::CircuitBreaker) } @@ -183,6 +181,7 @@ it 'returns a Search::Zoekt::SearchResults' do expect(service.use_zoekt?).to eq(true) + expect(service.search_type).to eq('zoekt') expect(service.zoekt_searchable_scope).to eq(group) expect(service.execute).to be_kind_of(::Search::Zoekt::SearchResults) end @@ -219,11 +218,13 @@ end end - context 'when basic_search is requested' do - let(:basic_search) { true } + context 'when basic search is requested' do + let(:service) do + described_class.new(user, group, search: 'foobar', scope: scope, page: page, source: source, search_type: 'basic') + end it 'does not search with Zoekt' do - expect(service.use_zoekt?).to eq(false) + expect(service.search_type).to eq('basic') expect(service.execute).not_to be_kind_of(::Search::Zoekt::SearchResults) end end diff --git a/ee/spec/services/search/project_service_spec.rb b/ee/spec/services/search/project_service_spec.rb index a013eda40650821a6704bdca68293ed02b22d923..1a505dea2d1df534620264c501546a44c09bb0e4 100644 --- a/ee/spec/services/search/project_service_spec.rb +++ b/ee/spec/services/search/project_service_spec.rb @@ -97,7 +97,6 @@ project, search: 'foobar', scope: scope, - basic_search: basic_search, advanced_search: advanced_search, source: source ) @@ -106,7 +105,6 @@ let(:search_code_with_zoekt) { true } let(:user_preference_enabled_zoekt) { true } let(:scope) { 'blobs' } - let(:basic_search) { nil } let(:advanced_search) { nil } let(:zoekt_nodes) { create_list(:zoekt_node, 2) } let(:circuit_breaker) { instance_double(::Search::Zoekt::CircuitBreaker) } @@ -126,6 +124,7 @@ it 'searches with Zoekt' do expect(service.use_zoekt?).to eq(true) + expect(service.search_type).to eq('zoekt') expect(service.zoekt_searchable_scope).to eq(project) expect(service.execute).to be_kind_of(::Search::Zoekt::SearchResults) end @@ -173,11 +172,21 @@ end end - context 'when basic_search is requested' do - let(:basic_search) { true } + context 'when basic search is requested' do + let(:service) do + described_class.new( + (anonymous_user ? nil : user), + project, + search: 'foobar', + scope: scope, + advanced_search: advanced_search, + search_type: 'basic', + source: source + ) + end it 'does not search with Zoekt' do - expect(service.use_zoekt?).to eq(false) + expect(service.search_type).to eq('basic') expect(service.execute).not_to be_kind_of(::Search::Zoekt::SearchResults) end end diff --git a/ee/spec/support/shared_examples/services/search_service_shared_examples.rb b/ee/spec/support/shared_examples/services/search_service_shared_examples.rb index c0081eec741ee8437428938159702d3d6d260ea5..b5c6e991c87537773650a056c1c6a11b94eb1ceb 100644 --- a/ee/spec/support/shared_examples/services/search_service_shared_examples.rb +++ b/ee/spec/support/shared_examples/services/search_service_shared_examples.rb @@ -34,17 +34,6 @@ expect(service.use_elasticsearch?).to eq(:value) end - - context 'when requesting basic_search' do - let(:params) { { search: '*', basic_search: 'true' } } - - it 'returns false' do - expect(Gitlab::CurrentSettings) - .not_to receive(:search_using_elasticsearch?) - - expect(service.use_elasticsearch?).to eq(false) - end - end end describe '#execute' do diff --git a/lib/api/search.rb b/lib/api/search.rb index ad7f46ccae7af616e1889c50d6283110960e2cc4..456d6f1f06774dbd6038300c775178ab974232c1 100644 --- a/lib/api/search.rb +++ b/lib/api/search.rb @@ -53,7 +53,6 @@ def search_service(additional_params = {}) state: params[:state], confidential: params[:confidential], snippets: snippets?, - basic_search: params[:basic_search], num_context_lines: params[:num_context_lines], search_type: params[:search_type], page: params[:page], diff --git a/spec/requests/api/search_spec.rb b/spec/requests/api/search_spec.rb index e21eb374be3f03daa3be8be32c085245845c6cf9..fbbc732ac24f3ce53f8c4eab6a42c5c7d65e0c60 100644 --- a/spec/requests/api/search_spec.rb +++ b/spec/requests/api/search_spec.rb @@ -766,9 +766,9 @@ def request context 'when requesting basic search' do it 'passes the parameter to search service' do - expect(SearchService).to receive(:new).with(user, hash_including(basic_search: 'true')) + expect(SearchService).to receive(:new).with(user, hash_including(search_type: 'basic')) - get api(endpoint, user), params: { scope: 'issues', search: 'awesome', basic_search: 'true' } + get api(endpoint, user), params: { scope: 'issues', search: 'awesome', search_type: 'basic' } end end