Rabbit Slide Show

全文検索でRedmineをさらに活用!

2017-08-26

Description

Redmineの全文検索機能はバージョンが上がるたびに改良されていますが、まだ少し「弱い」機能です。長年活用しているRedmineにはたくさんの有用な情報が入っているので、すごく「使える」全文検索があると既存の情報を有効活用できます。Redmineの全文検索機能をすごく「使える」全文検索機能にする方法を紹介します。

Text

Page: 1

全文検索で
Redmineを
さらに活用!
須藤功平
株式会社クリアコード
Redmine大阪 第17回勉強会
2017-08-26
全文検索で Redmineを さらに活用!
Powered by Rabbit 2.2.1

Page: 2

よく活用されたRedmine
情報の宝庫
問題解決の経緯
Wikiに整理したノウハウ
全文検索で Redmineを さらに活用!
Powered by Rabbit 2.2.1

Page: 3

さらに活用するために
必要なときに
必要な情報に
素早くアクセスしたい!
全文検索で Redmineを さらに活用!
Powered by Rabbit 2.2.1

Page: 4

活用方法:検索!
全文検索で Redmineを さらに活用!
Powered by Rabbit 2.2.1

Page: 5

活用の壁
よく活用されたRedmine
大量の情報(ただし玉石混合)
さらに活用するための課題
大量→必要な情報を見つけにくい
大量→探す時間が増える
全文検索で Redmineを さらに活用!
Powered by Rabbit 2.2.1

Page: 6

課題例1:検索ノイズが多い
これ以外全部ノイズ
全文検索で Redmineを さらに活用!
Powered by Rabbit 2.2.1

Page: 7

課題例2:検索が遅い
本当に大量だとね!
↓これくらいだと遅くない
チケット数:4049
コメント数:41264
Wikiページ数:1081
1秒以内に返ってくる
キャッシュが効く:0.1sくらい
キャッシュが効かない:0.7sくらい
全文検索で Redmineを さらに活用!
Powered by Rabbit 2.2.1

Page: 8

解決策
Groongaで
Redmineを
高速・高精度
全文検索
全文検索で Redmineを さらに活用!
Powered by Rabbit 2.2.1

Page: 9

解決例1:検索ノイズがない
全部それっぽい!
全文検索で Redmineを さらに活用!
Powered by Rabbit 2.2.1

Page: 10

検索ノイズ?
上位N件でがっかりする?
がっかり→ノイズ多い
ユーザーは上位N件しか確認しない
Groongaはスコアを調整してソート
件数は関係ない
実はこの例ではヒット件数は同じ
全文検索で Redmineを さらに活用!
Powered by Rabbit 2.2.1

Page: 11

解決例2:検索が速い
↓これくらいだと誤差
チケット数:4049
コメント数:41264
Wikiページ数:1081
参考:
既存(キャッシュあり)と
Groonga(キャッシュなし)が
同じくらい
全文検索で Redmineを さらに活用!
Powered by Rabbit 2.2.1

Page: 12

200万チケットのケース
https://twitter.com/akahane92/status/733832496945594368
全文検索で Redmineを さらに活用!
Powered by Rabbit 2.2.1

Page: 13

ここまでのまとめ
Redmineをさらに活用したい!
素早く必要な情報にアクセス!
検索をがんばらないと!
Groongaで全文検索!
検索ノイズが少ない!
速い!
全文検索で Redmineを さらに活用!
Powered by Rabbit 2.2.1

Page: 14

ここからの話
導入したくなる
情報を紹介
全文検索で Redmineを さらに活用!
Powered by Rabbit 2.2.1

Page: 15

インストール:RDBMS
対応RDBMS
MySQLもPostgreSQLも!
RDBMSにGroonga対応
プラグインをインストール
プラグイン:別途サービス管理不要→運用コスト増加な
し
MySQL:Mroonga
PostgreSQL:PGroonga
全文検索で Redmineを さらに活用!
Powered by Rabbit 2.2.1

Page: 16

インストール:Mroonga
http://mroonga.org/ja/docs/install.html
パッケージで簡単インストール
対応プラットフォーム
Debian GNU/Linux, Ubuntu
CentOS Fedora
macOS
Windows
全文検索で Redmineを さらに活用!
Powered by Rabbit 2.2.1

Page: 17

インストール:PGroonga
https://pgroonga.github.io/ja/install/
パッケージで簡単インストール
対応プラットフォーム
Debian GNU/Linux, Ubuntu
CentOS Fedora
macOS
Windows
全文検索で Redmineを さらに活用!
Powered by Rabbit 2.2.1

Page: 18

インストール:プラグイン
% cd redmine
% git clone \
https://github.com/okkez/redmine_full_text_search.git \
plugins/full_text_search
% bin/rake redmine:plugins RAILS_ENV=production
再起動で完了!
全文検索で Redmineを さらに活用!
Powered by Rabbit 2.2.1

Page: 19

高度な検索1:AND/OR/NOT
キーワード単位でのAND/OR/NOT
従来:AND/ORのみ
従来:キーワード全体で切り替え
例:
(Groonga OR Mroonga) -PostgreSQL
GroongaまたはMroongaを含むが
PostgreSQLは含まない
全文検索で Redmineを さらに活用!
Powered by Rabbit 2.2.1

Page: 20

高度な検索2:並び順の変更
ソート対象:スコア・更新時刻
従来:更新時刻のみ
ソート順:昇順・降順
従来:降順のみ
全文検索で Redmineを さらに活用!
Powered by Rabbit 2.2.1

Page: 21

並び順の変更UI
全文検索で Redmineを さらに活用!
Powered by Rabbit 2.2.1

Page: 22

ここまでのまとめ
簡単にインストールできる
運用も楽
AND/OR/NOTを使える
絞り込みに便利
並び順をカスタマイズできる
スコアと更新時刻で十分
全文検索で Redmineを さらに活用!
Powered by Rabbit 2.2.1

Page: 23

2017年5月以降の話
redmine.tokyo 第12回勉強会
2017年5月
ノイズが少なくて高速
その後
高速化
類似issue検索対応
全文検索で Redmineを さらに活用!
Powered by Rabbit 2.2.1

Page: 24

高速化
旧
LIKE検索をGroongaに置き換え
他の条件はそのまま
新
すべてGroongaで検索
高速・柔軟・高度な検索をサポート
全文検索で Redmineを さらに活用!
Powered by Rabbit 2.2.1

Page: 25

データの扱い
旧
正規化してデータを保存
検索時に複数回のSELECT
新
1つのテーブルにデータを保存
1回のSELECTで検索(速い)
全文検索で Redmineを さらに活用!
Powered by Rabbit 2.2.1

Page: 26

柔軟
ドリルダウンで対象を分別
チケットn件・Wikiページn件とか
標準でもあるやつ
ハイライト・スニペット
標準よりもいい感じ
類似文書検索
全文検索で Redmineを さらに活用!
Powered by Rabbit 2.2.1

Page: 27

類似文書検索
活用例
類似issue検索
実装着手
類似Wiki検索
未実装
全文検索で Redmineを さらに活用!
Powered by Rabbit 2.2.1

Page: 28

類似issue検索
全文検索で Redmineを さらに活用!
Powered by Rabbit 2.2.1

Page: 29

類似issue:ユースケース
新しい問題が発生!
あれ?どこかで見たような…
プラグイン:
「このissue、似ていませんか?」
→問題の早期解決!
全文検索で Redmineを さらに活用!
Powered by Rabbit 2.2.1

Page: 30

類似issue検索:現実装
issue閲覧時
自動で類似issueを提示
Groonga内のデータを活用
テキストデータで類似文書検索
精度
まぁまぁ
全文検索で Redmineを さらに活用!
Powered by Rabbit 2.2.1

Page: 31

ここからの話
今後の野望
全文検索で Redmineを さらに活用!
Powered by Rabbit 2.2.1

Page: 32

類似issue検索精度向上
メタデータを活用
手動設定の関連issue情報使用
属性情報使用
カテゴリとかトラッカーとか
同一プロジェクトに限定する
Wikiも対象に加える
全文検索で Redmineを さらに活用!
Powered by Rabbit 2.2.1

Page: 33

類似issue検索精度向上
機械学習技術を活用
字面でなく意味で類似文書検索
例:メールのthreadとプログラムの
threadは違う
例:MroongaでMySQLも類似度向上
回答の自動生成
RNNを用いた機械翻訳とか
類似issueの結論を探さなくてよい
全文検索で Redmineを さらに活用!
Powered by Rabbit 2.2.1

Page: 34

データ活用に向けて
GroongaにPython組込
Rubyでデータ処理
Red Data Tools
Apache Arrow
次世代データ交換フォーマット
コミッターになった!
全文検索で Redmineを さらに活用!
Powered by Rabbit 2.2.1

Page: 35

類似issue
共同開発組織募集
精度向上にはデータが不可欠
データを持っていそうな組織
大量ユーザー・長期間運用組織
マネージドサービス提供組織
Redmine内データを活用したい
組織はぜひ!
全文検索で Redmineを さらに活用!
Powered by Rabbit 2.2.1

Page: 36

添付ファイル内全文検索
現状:ファイル名と説明
テキスト抽出できれば検索可能
テキスト抽出ツール例:ChupaText
Groongaプロジェクトのテキスト抽出ツール
全文検索で Redmineを さらに活用!
Powered by Rabbit 2.2.1

Page: 37

添付ファイル内全文検索
実装案
テキスト抽出部分をプラグイン
できるようにすればRedmine本
体に入れられるのでは!?
ChupaTextよりApache Tikaを使いた
い人もいそう
検索はLIKEでよい
Groongaプラグインを入れたら高速になる、でよい
だれかチャレンジしない?
全文検索で Redmineを さらに活用!
Powered by Rabbit 2.2.1

Page: 38

入力補完
検索ボックス
入力に応じてキーワードを随時提示
↑ヒットするもののみ
各種入力欄(タイトルなど)
入力に応じて既存内容を随時提示
ローマ字でインクリメンタルサーチ
全文検索で Redmineを さらに活用!
Powered by Rabbit 2.2.1

Page: 39

入力補完:ユースケース
検索ボックス
自然と適切な検索に誘導!
例:typoを防ぐ・表記揺れを吸収
各種入力欄
自然と表記を統一!
→検索しやすい・理解しやすい
例:typoを防ぐ・表記揺れを吸収
全文検索で Redmineを さらに活用!
Powered by Rabbit 2.2.1

Page: 40

入力補完:実装
Groonga内のデータを活用
どのくらいヒットするキーワード?
ログも活用:検索頻度は?
メタデータも活用:
プロジェクト・トラッカー毎に
文脈をわける
開発協力者を募集
実装・データ提供・発注など
全文検索で Redmineを さらに活用!
Powered by Rabbit 2.2.1

Page: 41

同義語展開
表記揺れを吸収
例:「打ち合わせ」・「打合せ」
吸収:「打ち合わせ OR 打合せ」
同義語は管理が大変!
文脈で異なる!増減する!
同義語管理を支援
例:同義語候補を自動生成
全文検索で Redmineを さらに活用!
Powered by Rabbit 2.2.1

Page: 42

同義語展開:ユースケース
検索ボックス
欲しい情報にたどり着ける!
表記揺れによる未発見を解消
同義語管理のコスト削減
Redmine内のデータを
より低コストで有効活用!
全文検索で Redmineを さらに活用!
Powered by Rabbit 2.2.1

Page: 43

同義語展開:実装
Groongaの組み込み機能を活用
高速に同義語展開が可能
同義語候補を機械学習
Groonga内のデータを活用
開発協力者を募集
実装・データ提供・発注など
全文検索で Redmineを さらに活用!
Powered by Rabbit 2.2.1

Page: 44

スマートナビ(仮)
言わなくても欲しいものを提示
例:駅の近くでスマホを見る
→その駅の時刻表を自動で表示
ポイント:ユーザーは
「駅名 時刻表」で
明示的に検索していない!
全文検索で Redmineを さらに活用!
Powered by Rabbit 2.2.1

Page: 45

スマートナビ:ユースケース
.oO(打ち合わせのアジェンダ
をWikiにまとめておこう)
Redmine:ホーム画面に該当Wikiペ
ージのリンクを表示
全文検索で Redmineを さらに活用!
Powered by Rabbit 2.2.1

Page: 46

スマートナビ:実装
行動履歴から知識を学習
打ち合わせ前にいつもWikiを更新
内容から事実を収集
Wikiページ内のテキスト
「参加者:○○…」から抽出
開発協力者を募集
実装・データ提供・発注など
全文検索で Redmineを さらに活用!
Powered by Rabbit 2.2.1

Page: 47

ここまでのまとめ
このプラグインの現状
Redmineの不便を解消
(マイナスを少しプラスに)
このプラグインの今後
Redmineをさらに有効活用!
(少しプラスをすごくプラスに)
全文検索で Redmineを さらに活用!
Powered by Rabbit 2.2.1

Page: 48

ここからの話
Redmineの開発に
参加しよう!
全文検索で Redmineを さらに活用!
Powered by Rabbit 2.2.1

Page: 49

開発に参加?
Redmine本体のコードを書く
だけじゃない
バグレポート・テスト・issue対応
ドキュメント作成・宣伝
プラグインを作る
だけじゃない
本体と同様↑のことも大事な開発
全文検索で Redmineを さらに活用!
Powered by Rabbit 2.2.1

Page: 50

開発の参加例
Groongaプラグイン開発時の
知見をフィードバック
Defect #21993: サイズ上限が小
Patch #23153: フックを追加
Feature #25198: スコアを表示
全文検索で Redmineを さらに活用!
Powered by Rabbit 2.2.1

Page: 51

敷居が高そう?
OSS Gateワークショップへ
参加してみよう
「OSS開発に参加」を経験できる
(Redmineもプラグインの多くもOSS!)
(もちろんこのプラグインもGroongaもOSS!)
https://oss-gate.doorkeeper.jp/
全文検索で Redmineを さらに活用!
Powered by Rabbit 2.2.1

Page: 52

添付ファイル内全文検索を
実装したい!
私に相談だ!
全文検索で Redmineを さらに活用!
Powered by Rabbit 2.2.1

Page: 53

まとめ
Redmineをさらに活用するなら
Groongaプラグインを使おう!
Redmineの開発に参加しよう!
OSS Gateワークショップが役立つ
宣伝:全文検索のことは
クリアコードに相談しよう!
全文検索で Redmineを さらに活用!
Powered by Rabbit 2.2.1

Other slides

Apache Arrow Apache Arrow
2018-12-08
Apache Arrow Apache Arrow
2018-11-17
Apache Arrow Apache Arrow
2017-06-13
Apache Arrow Apache Arrow
2017-05-28
Mroonga! Mroonga!
2015-10-30