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