はんドンクラブ 運営ブログ

Mastodonインスタンス「handon.club」の運営ブログです。コラムなど,Mastodonに関する一般的な記事も投稿予定です。

全文検索システムを試験運用します

タイムラインの方でも一部予告していましたが,handon.clubに日本語全文検索を導入しました。全文検索にはチューニングが必要なため,当面はテスト期間として運用しながらチューニングをおこなうこととします。以下で詳細をご説明しますが,不明点はお気軽に管理人までお知らせ下さい。

できること

handon.clubのWebページから,日本語キーワードで以下を検索することができます。

  • 自分の投稿
  • 他人の投稿のうち,自分がお気に入りに登録した投稿
  • 他人の投稿のうち,自分がブーストした他人の投稿
  • 他人の投稿のうち,自分に対するリプライ/ダイレクトメッセージ

ローカルタイムライン全体の検索はできません。

なお,これまで通り,以下の検索も可能です(これは,今回の試験運用とは関係ありません。もともと出来ていました)。

参考までに,確実に使われているであろうハッシュタグを検索しても,必ず「0人がトゥート」と表示されると思います。これはバグです。検索結果に出てきたハッシュタグをクリックすることで,期待した結果が得られます。

f:id:highemerly:20190104235321p:plain:w256

検索のやり方

大半のMastodonクライアントからは検索できないと思ってください。Webページから検索機能を使ってください。

なお,Mastodonクライアントに検索機能が付いている場合がありますが,その検索は「handon.clubが提供する検索機能」ではなく,「他のサービスが提供する検索機能」です。そのため,今回追加した検索機能とは関係ありません。「他のサービスが提供する検索機能」では,handon.clubのすべてのトゥートをキャッシュ出来ているわけではありませんので,適切な結果が得られない可能性があります。

では,「handon.clubが提供する検索機能」について,実際の検索のやり方を説明します。細かい方法は,画面幅(PCまたはスマホ)によって異なります。PCのような画面幅が広い環境では,発言欄のうえにある「検索」窓にキーワードを入力してください。

f:id:highemerly:20190104232534p:plain:w256
PCの場合の検索方法

スマホのような画面幅が狭い環境では,「虫眼鏡」のアイコンを押すと,PCと同じ「検索」窓が出現します。ここにキーワードを入力してください。

f:id:highemerly:20190104232630p:plain:w450
スマホの場合の検索方法

この検索窓を使った場合の検索結果イメージを以下に示します。この結果は管理人のアカウントでログインした状態で検索したものですので,他のユーザが検索すると違う結果が得られる点にはご注意ください。いずれにしろ,他人の発言であっても,リプライやお気に入りは表示されていることがわかるかとおもいます(ここで,他人の発言は,他のインスタンスでも表示されます)。

f:id:highemerly:20190104234657p:plain:w256
検索結果イメージ

テスト期間中の注意事項

日本語の検索には若干のチューニングが必要です。そのため,テスト運用中には,一時的に検索結果が得られなくなったり,おかしな検索結果となる場合があります。具体的には,以下の様な制約があります。

  • 検索結果が得られない場合がある
  • 検索したワードが含まれていないにもかかわらず結果に表示される/結果に漏れがある *1

また,テスト運用中に限らず,本運用の場合においても,以下の制約事項を設ける予定です。

  • 検索に時間がかかる*2
  • 検索結果は最大50件までとする *3

やったこと

検索機能は,Mastodon自体にもある程度のものはあるのですが,本格的に検索できるようにするためにはElasticsearchが必要となります。そのため今回は,Elasticsearchを導入しました。具体的な設定等は以下のとおりです。

  • Elasticsearch
    • バージョン6.xを導入
      • JVMメモリ割当は256MBにしてみました。当面これで様子を見ます。
    • 日本語形態素解析プラグインであるkuromojiを導入
  • Mastodon
    • 検索結果がランダム表示であったため,新しい順に並ぶようにソースコードを書き換え
    • 日本語のような"分かち書き"をしない言語でもよい検索結果が得られるよう,ソースコードを書き換え
      • 但しまだうまくいっていないようで,検索結果にノイズが載っているかと思います。この点は運用しながら調整を進めます。

*1:日本語検索のチューニングが不完全なため。

*2:最低限のサーバリソースで検索機能を実現しているため,当面改善の見込みはありません。

*3:今後チューニング予定ですが,おそらく50件〜100件程度が限度かと思われます。