GitLab
GitLabDay 18

gitlab-ce(v10.2.5)で2文字以下の検索結果がおかしい件

背景

普通にsearchを利用するんですが、2文字以下の場合issueの検索結果がおかしい。
英語/日本語問わず、2文字以下の場合の結果でissueだけ全件でてきてしまう。3文字以上だと問題なく動作するのに、何故・・・

英語の場合、2文字以下になると検索結果が膨大になってしまうのはわかりますが、日本語の場合、2文字の検索はよくある気がします。

日本語で書かれたissueを検索する場合、不便なので少し調べてみました。

関連する部分を探す

探していると以下のソースに最終的にぶち当たりました。
lib/gitlab/sql/pattern.rb

lib/gitlab/sql/pattern.rb
module Gitlab
  module SQL
    module Pattern
      extend ActiveSupport::Concern

      MIN_CHARS_FOR_PARTIAL_MATCHING = 3
      REGEX_QUOTED_WORD = /(?<=\A| )"[^"]+"(?= |\z)/

...

        def partial_matching?(query)
          query.length >= MIN_CHARS_FOR_PARTIAL_MATCHING
        end
...

MIN_CHARS_FOR_PARTIAL_MATCHINGまさにこれです。
3文字以上じゃないと動作しないようになっていました。

MIN_CHARS_FOR_PARTIAL_MATCHINGを1に変更したら1文字でも検索が動くようになりましたがどうなんでしょうか・・・

追記

やはり、上記の修正を行うとパフォーマンスに影響があるようです。
規模が大きい場合は非推奨とのことでした。