背景
普通に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文字でも検索が動くようになりましたがどうなんでしょうか・・・
追記
やはり、上記の修正を行うとパフォーマンスに影響があるようです。
規模が大きい場合は非推奨とのことでした。