この記事はメンテナンス休止中です
この記事は 2022-10-16 に初投稿し、内容の拡充のために日々改定を続けて行くつもりでした.しかし、同-10-18 にQiita検索システムの改定が行われたようで、この記事に書かれている通りには動作しなくなったものもかなりあります。
Qiita改定版も、暫くは仕様確定のための手直しが続きそうです。これが完了するまでは、内容拡充のための動作確認は休止することにします。したがって、ここに書いている内容は、現在の検索仕様とは異なる部分も多いはずです。
はじめに
検索サイトごとに、それぞれ特徴のある検索オプションが存在します。
Qiitaもこの中の一つです(下表参照。Qiita検索画面から転記)。
Qiita検索オプション | 意味 |
---|---|
title:Git | タイトルに「Git」を含んでいる |
body:Ruby | 本文に「Ruby」を含んでいる |
code:function | コードに「function」を含んでいる |
tag:Rails | 「Rails」タグが付いている |
user:tsubolabo | tsubolaboが作成した |
stocks:>3 | 3件より多くストックされている |
created:>2022-09-16 | 2022-09-16 以降に作成された |
updated:>2022-09 | 2022-09-01 以降に更新された |
-tag:Ruby | 「tag:Ruby」を含まない |
Ruby OR Rails | 「Ruby」または「Rails」を含んでいる |
user: の後に続く部分は、ログイン前は qiita ですが、ログインすると会員のユーザ名に変わります。なかなか芸の細かい所を見せてくれます。
しかし、検索オプションに限らず、Qiitaのヘルプは全般的に、悪く言えば「端折り過ぎ」、良く言えば「能ある鷹は爪を隠す」的になっています。ですから、Qiitaのヘルプに載っているものが、Qiitaで使える検索オプションの全てではありません。そこで、どこまで使えるのか、試行錯誤で色々といじくり回してみました。
OR検索 はあるのに AND検索 はないのか?
馬鹿な疑問でした。日頃、当たり前のように使っていた複数の単語を単純に並べるだけのやり方が AND を意味していました。
一文字でも検索できるのか?
暇に任せて試した結果です。
-
アルファベット
a~z 全ての文字について、一文字だけでも検索結果が表示されました。C言語とかR言語など、アルファベット一文字だけで検索する人も多いでしょうから、「一文字だけの検索は対象外です」などと言っていたら相手にされないのでしょうね。
また。例えば、全角のAで検索しても、半角のA,aまで検索対象になるようです。半角のアルファベットで検索して全角までカバーしてくれているのかどうかは未確認です(そもそも全角アルファベットの記事はあまり見たことがありません)。 -
ひらがな
これはなかなか微妙です。全くヒットしないのは「えかきけさたつなにねのはへもやよりるわをん」 です。タグ名だけにヒットするのは「てとぬ」。ヒットはしても「?」なものは「しせみれ」(し→「し,しよ,する」、せ→「しよ,し,する」、み→「み,みよ,みる」、れ→「れ,れる」にヒットして太字になる)です。規則性をうかがい知ることもできない複雑さです。 -
漢字
これも微妙です。「備」で検索すると、「備忘」の「備」にはヒットしますが、「忘備」の「備」にはヒットしません。また、「忘」で検索したときには、「忘備」の「忘」にはヒットしますが、「備忘」の「忘」にはヒットしません。単語の先頭の文字だけが検索対象になるのでしょうか。
ただし、他の条件(例えばuser:)と AND にして検索すると、また傾向が変わってきます。「老」や「害」の一文字では全くヒットしませんが「老害」はヒットします。
以上、どうでも良いような些細な情報で大した役にも立たないでしょう。しかし、結論として言いたいことはただ一つ、せっかくの情報の宝庫を前にして、通り一遍だけの検索で「なにも該当なし」と早々に諦めてしてしまうのは禁物です。
指定日「以降」という表現は、指定日も含むはずだが?
created:>2022-09-16 で検索すると、2022-09-16付けの記事は検索対象になりません。どうも納得いかないので、半信半疑で created:>=2022-09-16 とやってみました。見事に指定日も含むようになりました。
指定日「以前」でも検索したいのだが?
上の例から当然思い付く created:<2022-09-16 をやってみました。見事に成功です。もちろん created:<=2022-09-16 も有効です。
一日だけの指定日で検索したいのだが?
もう、こうなると惰性で created:==2022-09-16 とする以外ありません。しかし、期待に反して受け付けてくれません。どうも、 created:2022-09-16 が正解のようです。
期間は指定できないのか?
以降や以前の個別の指定だけでは、検索結果が多すぎて全部を表示してくれません(最高100件までのようです)。検索結果を漏れなく表示して貰うためには、適度な期間の指定をしたくなります。そのようなときには、以降条件と以前条件を並べて AND検索 にします。
created:>=2022-09-10 created:<=2022-09-15
作成日指定と更新日指定はどう違うのか?
作成日指定(created:) は、文字通り、指定日に新規投稿したものだけが検索対象になります。一方、更新日指定(updated:) は、上記に加えて、指定日に既投稿分を編集・上書き再投稿したものも含めます。同じ期間で指定すれば、更新日指定の方が検索結果の件数は多くなります。
上書き再投稿した記事だけを拾い出したければ、後述のように「排除記号(-)」を利用して工夫します。
なお、検索オプションの説明表によれば、更新日指定の場合には更新月の指定しかできないように見えますが、月日での指定ももちろん可能です。月までしか指定していないときには、01日を指定したものと見なされるようです。
検索オプション有りと無しでは何が違うのか?
オプションを指定しないときには、title, body, code, tag, user のどこに含まれる文言でも検索対象になります。それぞれのオプションを指定すると、その内部だけが検索対象になります。
注: まだ十分に確認できてはいませんが、code: オプションは「コメント文の中にしか含まれていない文言」は検索対象外になるようです。
ストック数での検索はできるのに、いいね数ではできない?
iines:>10 とか lgtms:>10 とか色々やってみましたが受け付けてはもらえませんでした。しかし、検索後に「ストック数順」「いいね数順」に並べ変える機能はあるので、これで何とかなりそうではあります。
他に、コメント数でも検索できると便利だと思いますが comments:>10 もダメでした。その内容が「盛り上がり」でも「炎上」でも、情報として結構役に立つと思うのですが・・・。
頭につく排除記号(-)はどのオプションにも有効なのか?
-title:, -body:, -code:, -tag:, -user: ともに有効のようです。ただし、-code: は「コードブロックが存在しているのに、その中に指定文字が含まれていないもの」を探せという意味ではありません。コードブロックが存在していない記事にまで全部ヒットしてしまいます。
排除記号(-)を使うと、created: と updated: を組み合わせて、更新記事から新規投稿記事を排除して、真の編集再投稿記事だけを拾い出すこともできます。
updated:2022-09-16 -created:2022-09-16
日付指定の月や日は2桁が必須か?
2022-08-09 は 2022-8-9 でも大丈夫でした。しかし、22-08-09 は不可です。
完全一致検索は使えないのか?
部分的にしか一致しない語句にまでヒットして、検索結果が多くなりすぎて困るときには、少々長めの語句でも、これに完全に一致するものだけを検索したくなります。このような目的で、google検索のオプションには「" "」という完全一致を指定できる記号が用意されています。
この方法は、上にあるQiita検索オプションのテーブルには記載されていません。ところが、完璧ではありませんがQiitaでも使えます。「正規表現」と指示するだけでは、「正規」や「表現」にもヒットしてしまうところを、「"正規表現"」とすれば「正規表現」だけにヒットするようになります。
しかし、例えば「"検索できない"」とした場合には、「検索でき」とか「できる」とか、目的外のものにまでヒットしてしまいます。Qiitaでは完全一致が実現できないこのような場合には、google検索サイトで次の方法が使えます。
"検索できない" Qiita
「Qiita」との AND検索 です。Qiitaの記事ではないものにもヒットしてしまいますが、なかなか便利な方法です。
さらに、次のようにすればもっと強力で、Qiitaの記事だけに絞り込めるうえに表示件数も多くなります1。
"検索できない" site:qiita.com
おわりに
他のサイトでもオプションまでつけて検索することは稀でした。検索をこれほど触ってみたのは今回が初めてです。したがって、私にとっては感動的な初体験でも、皆さんには常識的なことばかりかもしれません。それでも、他にも便利なものが見つかったら追記していくつもりです。