redmine.tokyo第12回勉強会:GroongaでRedmineを高速全文検索 #redmineT - 2017-05-15 - ククログ

ククログ

株式会社クリアコード > ククログ > redmine.tokyo第12回勉強会:GroongaでRedmineを高速全文検索 #redmineT

redmine.tokyo第12回勉強会:GroongaでRedmineを高速全文検索 #redmineT

須藤です。開発しているRedmineのプラグインはWiki Change NotifierJournal Change Notifierです。

2017年5月13日にredmine.tokyo第12回勉強会が開催されました。ここでGroongaを使ってRedmineを高速全文検索するプラグインを紹介しました。

redmine.tokyoのこれまでの勉強会の資料を見てもわかるとおり、Redmineはよく作られたプロダクトです。ただ、全文検索処理には速度面・制度面で課題があり、それを解決し、Redmineの弱点を克服するのがこのプラグインです。今回の発表では、現在のRedmineの弱点を克服するだけでなく、むしろ検索を強みにするにはどうすればよいかという話もしました。たとえば、Redmine内の情報から機械学習で有用な情報を抽出し、それを活かした検索をすることでこれまでより効率よくRedmineを使えるようにする、といった具合です。このあたりに取り組むためには検索技術・データ分析技術・分析対象のデータ・開発費用などが必要です。すでにRedmineを活用していて大量の情報を保存している方で、Redmineをさらに活用することに興味のある方はご連絡ください。一緒にRedmineのさらなる活用に取り組みましょう。

関連リンク:

内容

この発表では次のことを紹介しました。

  • Redmineの全文検索をマイナスから少しプラスへ

  • Redmineの全文検索を少しプラスからすごくプラスへ

  • Redmineの開発に参加しよう

Redmineの全文検索をマイナスから少しプラスへ

Redmineはプロジェクト管理に使われるため、Redmineにはプロジェクトの情報がたくさん入っています。Redmineを活用し続ければ続けるほど増えていきます。Redmine内の情報を有効活用できればさらに効率よくプロジェクトに取り組めます。たとえば、過去の類似のバグレポートを参照することで新規のバグをすぐに解決できる、といった具合です。Redmineの情報を有効活用するために重要なのが全文検索です。

たくさんの情報の中には、重要な情報もありますが、雑多な情報もあります。そのため、単に全文検索しただけで重要な情報が見つかるわけではありません。雑多な情報もヒットしてしまい、それが重要な情報を隠してしまうからです。現在のRedmineの全文検索は重要な情報も雑多な情報も一緒くたに扱っているため、重要な情報を見つけにくくなっています。これが課題の1つです。

重要な情報を見つけやすいかどうか以前にそもそも速く検索できるかどうかも重要です。重要な情報を見つけやすかったとしても検索結果を表示するまでに時間がかかっていれば(たとえば10秒とか)使いやすくありません。検索キーワードを試行錯誤することも難しいですし、同時に複数の人が検索することもままなりません。これが現在のRedmineの全文検索のもう1つの課題です。

Redmineを高速全文検索するプラグインを使うと、大量のデータが入っていても高速(1秒以内)に重要なものを見つけやすくなります。

速度面においては、200万チケットがあるRedmineでも380msで検索できます。(従来は1時間以上かかっていたケース。)

重要なものを見つけやすくするという観点では、ヒットした内容それぞれにどれだけキーワードにマッチしていそうかの度合いをつけて、それを使ってマッチしていそうなものから提示します。これにより最初の10件程度を確認するだけで重要なものを見つけることができます。

実は、このような全文検索機能は「全文検索システム」という文脈では普通のことです。そのため、これらを実現したのはRedmineの全文検索機能をマイナスから少しプラスにした、という程度のことです。しかし、これだけでもずいぶんRedmineの検索は使いやすくなります。検索が使い物にならなくて使っていなかったという方は、ぜひこのプラグインをインストールして検索してみてください。今度はもっと活用したくなるはずですよ。

Redmineの全文検索を少しプラスからすごくプラスへ

高速・高精度の全文検索を実現するために全文検索エンジンという専用のモジュールがあります。全文検索エンジンというと「キーワードを入力して検索する」ことだけを頑張っていると思っている人が多いかもしれません。しかし、実は、検索を軸にしてもっとたくさん便利にできます。

現在のプラグインは、まだ単に高速・高精度で全文検索できるようにしているだけですが、今後はもっとRedmineを活用できるように育てていきたいです。いくつかそのアイディアを紹介します。クリアコードだけでなく、もっとRedmineを活用したい人たちと協力しながら実現したいです。実現した成果はRedmineと同じくフリーソフトウェアとして多くのRedmineユーザーが利用できるようにします。実現案も簡単に説明するので、興味のある方(実装したい方、データを持っている方、開発費を払ってでも実現したい方)はぜひご連絡ください。

類似issue検索

1つめのアイディアはissue作成時・閲覧時に自動で類似issueを提示する機能です。新しい問題が発生したときに、プラグインが類似issueを提示することで既存のノウハウを活用して早期に問題を解決できます。

類似issue検索の実現案を説明します。issueのテキストを使った類似文書検索(全文検索エンジンGroongaの標準機能)を軸に、Redmine内のメタデータを活用することで精度をあげます。メタデータとは手動で設定した関連issue情報やWiki内のテキストから機械学習した類義語情報などです。

入力補完

2つめのアイディアは入力時に適切な値を随時ユーザーに提示する機能です。たとえば、検索ボックスでキーワードの一部を入力するだけでキーワード全体の補完候補を提示します。これにより、ユーザーの入力コストを下げるだけでなく、適切なキーワードに自然と誘導することになるので、より見つかりやすい検索を実行できます。Groongaは日本語に特化した機能を組み込みで提供しており、ローマ字から日本語を入力補完することもできます。これを使うと「tok」(日本語入力OFFの状態で入力)から「東京都」を補完候補に出すこともでき、よりユーザーの入力コストを下げることができます。

検索というと見つけるためだけに使うというイメージがあるかもしれませんが、入力時にも有用です。タイトルやバージョンなどの入力欄で入力候補を提示することにより、入力内容の表記揺れ・表現の揺れが自然と少なくなります。表記揺れ・表現の揺れが少ないと全文検索エンジンもうれしいですが、理解しやすくなるので読む人もうれしいです。より活用しやすいデータということです。

入力補完の実現案を説明します。Groongaに前方一致検索(ローマ字変換対応)があるので、それを活用します。単に候補を提示するだけでは使いやすいものになりません。候補の最初の方に必要なものが提示されている必要があります。精度も大事ということです。精度をあげるために、全文検索用のインデックスの統計情報を活用します。たとえば、あまりにもヒットしすぎるようなキーワード(たとえば「です」とか)は適切ではありません。統計情報を活用してそのような不要なキーワードを除去します。また、ログやメタデータも活用します。文脈(プロジェクトやトラッカーなど)毎に候補に提示するリストを調整し、より精度の高い候補を提示します。

同義語展開

3つめのアイディアは同義語管理を支援する機能です。日本語では同じものをいろんな呼び方で示すことができます。たとえば、「ネジ」も「ねじ」も「ボルト」も同じものを指します。検索精度を高めるにはこのような同義語に関する情報が必要です。しかし、同義語の管理は大変です。たくさんありますし、文脈が違えば同義語のリストも変わるため共有することが難しいからです。

同義語のリストがあればGroongaが組み込み機能で提供している同義語展開機能を利用できます。検索部分に問題はありません。同義語管理がネックなのです。

同義語管理支援の実現案を説明します。同義語を自動で完璧に整備するのは難しいですが、人の作業を大幅に削減する支援ならできます。そこを狙います。Redmine内には大量のテキストデータがあるはずなので、機械学習で同義語候補を自動で抽出します。また、同義語を管理するUIも実装し、より人の作業を減らします。

スマートナビ(仮)

4つめは「言わなくても欲しいものを提示する機能」です。駅の近くでスマートフォンを見ると、その駅の時刻表を「自動で」表示していませんか?そのように、現在のユーザーの状況から欲しそうなものを自動で検索して提示する機能です。

共同開発者募集

もっとRedmineを活用できるようなアイディアをいくつか紹介しました。クリアコードだけでなく、もっとRedmineを活用したい人たちと協力しながら実現したいです。実現した成果はRedmineと同じくフリーソフトウェアとして多くのRedmineユーザーが利用できるようにします。実現案も簡単に説明するので、興味のある方(実装したい方、データを持っている方、開発費を払ってでも実現したい方)はぜひご連絡ください。

Redmineの開発に参加しよう

Redmineの開発に参加したいとは思っているけどなかなか実現できていない、という方はいませんか?そんな方にオススメなのがOSS Gateが開催しているイベントです。OSS Gateは「OSSの開発に参加する人を継続的に増やす取り組み」です。OSS GateではOSSの開発に参加する人をサポートするイベントを開催しています。RedmineもOSSなのでこのイベントでサポートしてもらいながらRedmineの開発に参加できます。最初の一歩をなかなか踏み出せていない、という人は活用してください。

東京では5月は22日(月)と27日(土)にイベントが開催されます。

大阪と札幌でも開催しています。(redmine.tokyo第12回勉強会には日本各地から参加者がいたので東京以外の情報も紹介しました。)

まとめ

redmine.tokyo第12回勉強会で、Groongaを使ってRedmineの全文検索機能を高速化するプラグインを紹介しました。現時点でできることだけでなく、今後の野望とRedmineの開発に参加したい人向けの情報も紹介しました。

Redmineのデータをもっと活用してより効率的に仕事を進めたくて、検索技術・データ分析技術・分析対象のデータ・開発費用を持っている方はご連絡ください。一緒に実現しましょう。