diff options
Diffstat (limited to 'app/finders/issuable_finder.rb')
-rw-r--r-- | app/finders/issuable_finder.rb | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/app/finders/issuable_finder.rb b/app/finders/issuable_finder.rb index 9f331d381aa..5fcb81949ee 100644 --- a/app/finders/issuable_finder.rb +++ b/app/finders/issuable_finder.rb @@ -46,7 +46,8 @@ class IssuableFinder requires_cross_project_access unless: -> { params.project? } - FULL_TEXT_SEARCH_TERM_REGEX = /\A[\p{ASCII}|\p{Latin}]+\z/.freeze + FULL_TEXT_SEARCH_TERM_PATTERN = '[\u0000-\u02FF\u1E00-\u1EFF\u2070-\u218F]*' + FULL_TEXT_SEARCH_TERM_REGEX = /\A#{FULL_TEXT_SEARCH_TERM_PATTERN}\z/.freeze NEGATABLE_PARAMS_HELPER_KEYS = %i[project_id scope status include_subgroups].freeze attr_accessor :current_user, :params @@ -335,7 +336,7 @@ class IssuableFinder return items if items.is_a?(ActiveRecord::NullRelation) return items if Feature.enabled?(:disable_anonymous_search, type: :ops) && current_user.nil? - return items.pg_full_text_search(search) if use_full_text_search? + return filter_by_full_text_search(items) if use_full_text_search? if use_cte_for_search? cte = Gitlab::SQL::CTE.new(klass.table_name, items) @@ -348,12 +349,15 @@ class IssuableFinder # rubocop: enable CodeReuse/ActiveRecord def use_full_text_search? - params[:in].blank? && - klass.try(:pg_full_text_searchable_columns).present? && + klass.try(:pg_full_text_searchable_columns).present? && params[:search] =~ FULL_TEXT_SEARCH_TERM_REGEX && Feature.enabled?(:issues_full_text_search, params.project || params.group) end + def filter_by_full_text_search(items) + items.pg_full_text_search(search, matched_columns: params[:in].to_s.split(',')) + end + # rubocop: disable CodeReuse/ActiveRecord def by_iids(items) params[:iids].present? ? items.where(iid: params[:iids]) : items |