GitHub の Repository Search は部分一致ではなく単語一致ですよという話

GitHub の検索ボックスから検索する人はちらほらいると思う。私もよく使うのだが、いまいちヒットしづらいというか、ちゃんと仕事してよーと感じる時が多い。

ので、その辺どうなってんのかを調べてみた。

結論

  • Repository Search は文字列の 部分一致ではない
  • Repository Search は 単語一致である (と思われる)

検索ボックスから検索したい時は、部分一致ではなく単語一致を狙うとよい。どうしても部分一致が使いたいなら clone → ローカルで Grep などで頑張ろう。

詳しく

stakiran/test_github_search というリポジトリを作って実験してみたのだが、一つ例を挙げて解説する。

リポジトリに hello.py というファイルがあるとする。

import sys

print('Hello.')
print('はろー')
print('こんにちは世界')

さてここでクイズ。以下の検索ワードのうち、hello.py にヒットするのはどれでしょう?

  • Q1. import
  • Q2. impor
  • Q3. はろー
  • Q4. こんにちは
  • Q5. こんにちは世界
  • Q6. ちは
  • Q7. "ちは"

正解(ヒットするもの)は以下です。

  • Q1. import
  • Q3. はろー
  • Q5. こんにちは世界

Q1 は import という単語に、Q3 は「はろー」という単語に、Q5 は「こんにちは世界」という単語に一致するため、ヒットしている。Q2, Q4, Q6, Q7 は 部分一致はするが単語一致してない ためヒットしない。

ここで「単語一致とは何か」という話になるが、詳しい仕様は私もわからない。ただ、

  • スペースやら "" やら '' やらで区切られた、一繋がりの文字列

という感じだと思う。もっというと、

print('こんにちは世界')

上記の日本語部分の単語とは「こんにちは」でも「世界」でもなく、「こんにちは世界」である。意味的(セマンティック)な単語ではなく構文的(シンタックス)な単語、とでも言えばいいのか。