Redmine全文検索プラグインに「クエリー展開」なる機能があることを先ほど知った阿部です。
ということで、全文検索プラグインにどのような機能があるのか知りたい方向けに網羅的な機能説明から構成までを紹介するのが本記事です。
(弊社のブログでも何度か紹介されている全文検索プラグインですが、機能の網羅的説明や構成の全体像を説明している記事はないので改めて説明します。)
いちおしポイント(≒ 機能の一覧)
全文検索プラグインをインストールするとRedmineがより便利になるポイント(≒ 追加される機能)を挙げます。
Redmineの標準検索を使っているとできて当然と思われるかもしれませんが、構成によっては難しい次の要件も満たしています。
いちおしポイント: 詳細
画面キャプチャも提示しながら詳細に説明していきます。
1. 検索が速くなる
タイトルそのままです。すばやく必要な情報を見つけられることは非常に重要なことです。
少し前の記事ですがベンチマークの結果もあるので合わせてご覧ください。
2. スコアでソート可能
デフォルトでは検索クエリに適合している(情報として価値が高い)データ(チケットやWikiなど)からリスト表示します。 これにより欲しているデータにたどり着きやすくなります。
スコア以外にも「更新日時」と「作成日時」でもソート可能です。昇順・降順どちらでもソートできます。 (標準の検索は更新日時の降順で固定です。)

検索結果にスコアの表示
この機能はプラグイン設定で「スコアを表示」にチェックを入れることで有効になります。

画面キャプチャの赤線の上にある数字がスコアです。 スコアは数値そのものの大きさよりも、相対的な順序に意味があります。多くの人は上位から順に確認し、特に最初のN件しか見ないことが多いため、並び順が結果の利用に大きく影響します。スコア値自体は目安や参考材料としてご利用ください。
3. 高度な検索
error か unable が含まれているが、recipeは含まいないデータを検索したいとき、
(error OR unable) -recipe のような複雑なクエリで検索できます。

4. メタデータで検索
標準の検索でもできる「チケットのみ」といった種類による絞り込みに加えて、チケットのステータスやユーザーによる絞り込みもできます。 また、リンクをクリックすることで簡単に絞り込めるUIを提供しています。

5. 類似チケット表示
「関連チケット」とは異なり、自動で似ているチケットをリスト表示します。 これにより過去に同じ対応などをしていればそれに気づきやすくなり、過去のノウハウで対応できるため効率化に繋がります。

注: この機能はプラグイン設定で「類似チケットを表示」にチェックを入れることで有効になります。
6. 添付ファイル内検索
別途、ChupaTextサーバを起動しておく必要がありますが、添付ファイル内のテキストも検索できます。
添付ファイル内を検索している様子がわかりにくいですが、次の画面キャプチャはhoge.txt内のテキストを検索で見つけている様子です。
検索結果:

ファイルの内容:

該当のファイルが添付されているチケット:

この例ではテキストファイルの内容を検索していますが、.docxや.xlsx、.pptxも検索可能です。
7. 表記のゆらぎ対応
表記のゆらぎとは「ウェブサイト」と「Webサイト」のように同じ意味を持つ単語が異なる表現で表記されている状態です。 ユーザーが「ウェブサイト」で検索した場合、ユーザーは「ウェブサイト」と「Webサイト」のどちらも見つけたいはずなので、それを実現できます。
現時点では手動で表記のゆらぎに対応するためのリストを登録する必要があります。
次の画面キャプチャの例のように事前に「ウェブサイト」と同じ意味の表記を登録しておくと、「ウェブサイト」で検索したときに ((ウェブサイト) OR (Webサイト)) で検索が行われ、表記のゆらぎを含めて検索できます。

ファイルからデータのインポート
表記ゆらぎのデータはCSVファイルやJSONファイルから一括で登録できます。 使い方は全文検索プラグインのREADMEをご覧ください。
この機能により外部ツール作成したデータをRedmineに同期して利用できます。 LLMを使って生成したデータを同期する、のような使い方を想定しています。
補足: 正規化でカバー
groonga、Groonga、Groongaといったアルファベットの大文字・小文字、半角・全角のようなゆらぎはGroongaのノーマライザーによって正規化されるため、特にリストを登録しなくてもgroongaで検索するとGroongaやGroongaもヒットします。
課題・展望
外部ツールで生成したデータを同期するなど運用でカバーできるところもありますが、基本的には手動でデータを登録する必要があります。 世の中には無数に表記のゆらぎが存在しているので、何らかの仕組みで自動で表記のゆらぎを吸収した検索ができるようにしていきたいです。
8. Wiki Extensionsのタグで検索
Wikiに便利機能を追加するWiki Extensionsプラグインをご利用の方も多いのではないでしょうか。 いくつか機能が追加されますが、全文検索プラグインに関係するのは、Wikiにタグが設定できるようになる機能です。
Wikiページでタグを利用している例:

全文検索プラグインでは、検索のページでWiki Extensionsプラグインのタグで絞り込みができます。 追加の設定は不要でWiki ExtensionsプラグインがインストールされているRedmineでは自動で有効になる機能です。
「4. メタデータで検索」の項目のひとつとして利用できます。「ラベル」がWiki Extensionsプラグインのタグにあたります。 使い方も「4. メタデータで検索」と同様で絞り込みたいタグのリンクをクリックすることで絞り込みできます。

権限管理
Redmineのプラグインなので、ログインしているユーザーの権限に応じて検索結果が表示されます。 全文検索用に別途権限の設定は不要です。
課題: 現在、プライベートチケットは検索結果に表示されません。
即検索対象に
高速な全文検索を実現するためには全文検索用のインデックスを作成する必要があります。 全文検索プラグインの場合はRedmineのデータ更新をトリガーとして、全文検索用のインデックスを更新する処理がすぐに動き出します。 (更新処理自体はRailsのActive Jobを利用しているので、非同期ジョブではありますが基本的にはすぐに全文検索用のインデックスが更新されます。)
全文検索プラグインの利用に必要なもの
これらの機能を使うためには、全文検索プラグインのRubyスクリプトのみのインストールでは足りません。 全文検索のコアとなるPGroonga or Mroonga、Groongaをインストールする必要があります。
- PGroonga
- https://pgroonga.github.io/ja/
- PostgreSQLからインデックスとしてGroongaを使うための拡張機能
- Mroonga
- https://mroonga.org/ja/
- GroongaをベースとしたMySQL用のストレージエンジン
- Groonga
- https://groonga.org/ja/
- PGroongaやMroongaで利用している全文検索エンジンです
- PGroongaやMroongaをパッケージでインストールすると依存関係で自動的にインストールされます
利用しているRDBMSに応じて、PGroongaかMroongaが必要です。 それぞれ主要なプラットフォーム向けにインストール用パッケージが提供されており、数個のコマンドの実行で簡単にインストールできます。
- PGroongaのインストール: https://pgroonga.github.io/ja/install/
- Mroongaのインストール: https://mroonga.org/ja/docs/install.html
お手軽にインストールできる様子はこの記事でも確認できます。 PGroongaの導入例ですが、Mroongaについても同様にインストールできます。
PGroonga or Mroongaをインストールするということは運用コストが増えるのか?が気になるところだと思うので、次のセクションから構成イメージを示しつつ、運用コストについて説明します。
構成イメージ
全文検索と言えばElasticsearchを思い浮かべる方が多いのではないでしょうか。 RedmineのプラグインでもElasticsearchを使って全文検索を実現するプラグインがあります。
Elasticsearchを使う場合、新たにElasticsearchサーバを起動し、運用する必要があります。 Redmineを運用中であれば、Redmineのアプリサーバ + DBサーバ(PostgreSQLサーバやMySQLサーバ)に加えてElasticsearchサーバの運用が加わります。
ところが全文検索プラグインの場合は運用すべきサーバは増えません。(注: 添付ファイル内検索をする場合はChupaTextサーバが追加で必要になりますが…)
全文検索プラグインは全文検索のためにGroongaを使います。 そして、そのGroongaにはMySQLやPostgreSQLからお手軽に利用できるソフトウェアがあります。 具体的にはPostgreSQLの場合はPGroonga、MySQLの場合はMroongaというソフトウェアがあります。 そのソフトウェアをRDBMSに導入することで利用が可能になるため、Elasticseachのように追加の全文検索用のサーバを追加する必要はありません。
構成イメージを図で示すと次のようになります。 全文検索プラグインで実現する場合は全文検索に関するソフトウェアがRDBMS内に含まれていることがわかります。
Redmineのみ
素のRedmineの構成イメージです。RedmineのアプリとRDBMSが必要です。

全文検索プラグインで実現する場合
全文検索プラグイン導入後後のイメージです。RDBMS内に全文検索の機能が追加されているため、Redmineのみと同様にRDBMSの運用をすれば良いです。

Elasticseachで実現する場合
全文検索用にElasticsearchを用意する必要あります。

運用コスト
上述の通り基本的には既存のRDBMSを運用するのと同等のオペレーションで済むので、オペレーションの観点で運用コストは増えません。 金額の観点でいうと全文検索用のインデックスを保存するためのディスクスペースが追加で必要になるので、その分が増えます。 ざっくりRedmineのみのときと比べるとディスクスペースは2倍くらい必要になります。
まとめ
全文検索プラグインの機能や構成について改めて説明しました。
全文検索プラグインの導入、運用中のお困りごとの解決、機能の追加まで何でも承りますので、お問い合わせフォームよりご連絡ください。