SlideShare a Scribd company logo
全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1
全文検索で
Redmineを
さらに活用!
須藤功平 株式会社クリアコード
Redmine大阪 第17回勉強会
2017-08-26
全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1
よく活用されたRedmine
情報の宝庫
問題解決の経緯
Wikiに整理したノウハウ
全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1
さらに活用するために
必要なときに
必要な情報に
素早くアクセスしたい!
全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1
活用方法:検索!
全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1
活用の壁
よく活用されたRedmine
大量の情報(ただし玉石混合)
さらに活用するための課題
大量→必要な情報を見つけにくい
大量→探す時間が増える
全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1
課題例1:検索ノイズが多い
これ以外全部ノイズ
全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1
課題例2:検索が遅い
本当に大量だとね!
↓これくらいだと遅くない
チケット数:4049
コメント数:41264
Wikiページ数:1081
1秒以内に返ってくる
キャッシュが効く:0.1sくらい
キャッシュが効かない:0.7sくらい
全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1
解決策
Groongaで
Redmineを
高速・高精度
全文検索
全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1
解決例1:検索ノイズがない
全部それっぽい!
全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1
検索ノイズ?
上位N件でがっかりする?
がっかり→ノイズ多い
ユーザーは上位N件しか確認しない
Groongaはスコアを調整してソート
件数は関係ない
実はこの例ではヒット件数は同じ
全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1
解決例2:検索が速い
↓これくらいだと誤差
チケット数:4049
コメント数:41264
Wikiページ数:1081
参考:
既存(キャッシュあり)と
Groonga(キャッシュなし)が
同じくらい
全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1
200万チケットのケース
https://twitter.com/akahane92/status/733832496945594368
全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1
ここまでのまとめ
Redmineをさらに活用したい!
素早く必要な情報にアクセス!
検索をがんばらないと!
Groongaで全文検索!
検索ノイズが少ない!
速い!
全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1
ここからの話
導入したくなる
情報を紹介
全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1
インストール:RDBMS
対応RDBMS
MySQLもPostgreSQLも!
RDBMSにGroonga対応
プラグインをインストール
プラグイン:別途サービス管理不要→運用コスト増加な
し
MySQL:Mroonga
PostgreSQL:PGroonga
全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1
インストール:Mroonga
http://mroonga.org/ja/docs/install.html
パッケージで簡単インストール
対応プラットフォーム
Debian GNU/Linux, Ubuntu
CentOS Fedora
macOS
Windows
全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1
インストール:PGroonga
https://pgroonga.github.io/ja/install/
パッケージで簡単インストール
対応プラットフォーム
Debian GNU/Linux, Ubuntu
CentOS Fedora
macOS
Windows
全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1
インストール:プラグイン
% 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
高度な検索1:AND/OR/NOT
キーワード単位でのAND/OR/NOT
従来:AND/ORのみ
従来:キーワード全体で切り替え
例:
(Groonga OR Mroonga) -PostgreSQL
GroongaまたはMroongaを含むが
PostgreSQLは含まない
全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1
高度な検索2
キーワード単位の優先度
重要語のスコアを上げ下げ
例:
Groonga (>MySQL OR <PostgreSQL)
「GroongaとMySQL」または
「GroongaとPostgresSQL」を含む
MySQLの方がPostgreSQLより重要
全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1
高度な検索2
キーワード単位の優先度
ノイズ語のスコアを下げる
例:
Groonga ~MySQL
Groongaを含む
MySQLを含んでいてもヒットする
MySQLを含むとスコアが下がる
全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1
高度な検索3:並び順の変更
ソート対象:スコア・更新時刻
従来:更新時刻のみ
ソート順:昇順・降順
従来:降順のみ
全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1
並び順の変更UI
全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1
ここまでのまとめ
簡単にインストールできる
運用も楽
AND/OR/NOTを使える
絞り込みに便利
並び順をカスタマイズできる
スコアと更新時刻で十分
全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1
2017年5月以降の話
redmine.tokyo 第12回勉強会
2017年5月
ノイズが少なくて高速
その後
高速化
類似issue検索対応
全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1
高速化
旧
LIKE検索をGroongaに置き換え
他の条件はそのまま
新
すべてGroongaで検索
高速・柔軟・高度な検索をサポート
全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1
データの扱い
旧
正規化してデータを保存
検索時に複数回のSELECT
新
1つのテーブルにデータを保存
1回のSELECTで検索(速い)
全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1
柔軟
ドリルダウンで対象を分別
チケットn件・Wikiページn件とか
標準でもあるやつ
ハイライト・スニペット
標準よりもいい感じ
類似文書検索
全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1
類似文書検索
活用例
類似issue検索
実装着手
類似Wiki検索
未実装
全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1
類似issue検索
全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1
類似issue:ユースケース
新しい問題が発生!
あれ?どこかで見たような…
プラグイン:
「このissue、似ていませんか?」
→問題の早期解決!
全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1
類似issue検索:現実装
issue閲覧時
自動で類似issueを提示
Groonga内のデータを活用
テキストデータで類似文書検索
精度
まぁまぁ
全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1
ここからの話
今後の野望
全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1
類似issue検索精度向上
メタデータを活用
手動設定の関連issue情報使用
属性情報使用
カテゴリとかトラッカーとか
同一プロジェクトに限定する
Wikiも対象に加える
全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1
類似issue検索精度向上
機械学習技術を活用
字面でなく意味で類似文書検索
例:メールのthreadとプログラムの
threadは違う
例:MroongaでMySQLも類似度向上
回答の自動生成
RNNを用いた機械翻訳とか
類似issueの結論を探さなくてよい
全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1
データ活用に向けて
GroongaにPython組込
Rubyでデータ処理
Red Data Tools
Apache Arrow
次世代データ交換フォーマット
コミッターになった!
全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1
類似issue
共同開発組織募集
精度向上にはデータが不可欠
データを持っていそうな組織
大量ユーザー・長期間運用組織
マネージドサービス提供組織
Redmine内データを活用したい
組織はぜひ!
全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1
添付ファイル内全文検索
現状:ファイル名と説明
テキスト抽出できれば検索可能
テキスト抽出ツール例:ChupaText
Groongaプロジェクトのテキスト抽出ツール
全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1
添付ファイル内全文検索
実装案
テキスト抽出部分をプラグイン
できるようにすればRedmine本
体に入れられるのでは!?
ChupaTextよりApache Tikaを使いた
い人もいそう
検索はLIKEでよい
Groongaプラグインを入れたら高速になる、でよい
だれかチャレンジしない?
全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1
入力補完
検索ボックス
入力に応じてキーワードを随時提示
↑ヒットするもののみ
各種入力欄(タイトルなど)
入力に応じて既存内容を随時提示
ローマ字でインクリメンタルサーチ
全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1
入力補完:ユースケース
検索ボックス
自然と適切な検索に誘導!
例:typoを防ぐ・表記揺れを吸収
各種入力欄
自然と表記を統一!
→検索しやすい・理解しやすい
例:typoを防ぐ・表記揺れを吸収
全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1
入力補完:実装
Groonga内のデータを活用
どのくらいヒットするキーワード?
ログも活用:検索頻度は?
メタデータも活用:
プロジェクト・トラッカー毎に
文脈をわける
開発協力者を募集
実装・データ提供・発注など
全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1
同義語展開
表記揺れを吸収
例:「打ち合わせ」・「打合せ」
吸収:「打ち合わせ OR 打合せ」
同義語は管理が大変!
文脈で異なる!増減する!
同義語管理を支援
例:同義語候補を自動生成
全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1
同義語展開:ユースケース
検索ボックス
欲しい情報にたどり着ける!
表記揺れによる未発見を解消
同義語管理のコスト削減
Redmine内のデータを
より低コストで有効活用!
全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1
同義語展開:実装
Groongaの組み込み機能を活用
高速に同義語展開が可能
同義語候補を機械学習
Groonga内のデータを活用
開発協力者を募集
実装・データ提供・発注など
全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1
スマートナビ(仮)
言わなくても欲しいものを提示
例:駅の近くでスマホを見る
→その駅の時刻表を自動で表示
ポイント:ユーザーは
「駅名 時刻表」で
明示的に検索していない!
全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1
スマートナビ:ユースケース
.oO(打ち合わせのアジェンダ
をWikiにまとめておこう)
Redmine:ホーム画面に該当Wikiペ
ージのリンクを表示
全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1
スマートナビ:実装
行動履歴から知識を学習
打ち合わせ前にいつもWikiを更新
内容から事実を収集
Wikiページ内のテキスト
「参加者:○○…」から抽出
開発協力者を募集
実装・データ提供・発注など
全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1
ここまでのまとめ
このプラグインの現状
Redmineの不便を解消
(マイナスを少しプラスに)
このプラグインの今後
Redmineをさらに有効活用!
(少しプラスをすごくプラスに)
全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1
ここからの話
Redmineの開発に
参加しよう!
全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1
開発に参加?
Redmine本体のコードを書く
だけじゃない
バグレポート・テスト・issue対応
ドキュメント作成・宣伝
プラグインを作る
だけじゃない
本体と同様↑のことも大事な開発
全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1
開発の参加例
Groongaプラグイン開発時の
知見をフィードバック
Defect #21993: サイズ上限が小
Patch #23153: フックを追加
Feature #25198: スコアを表示
全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1
敷居が高そう?
OSS Gateワークショップへ
参加してみよう
「OSS開発に参加」を経験できる
(Redmineもプラグインの多くもOSS!)
(もちろんこのプラグインもGroongaもOSS!)
https://oss-gate.doorkeeper.jp/
全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1
添付ファイル内全文検索を
実装したい!
私に相談だ!
全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1
まとめ
Redmineをさらに活用するなら
Groongaプラグインを使おう!
Redmineの開発に参加しよう!
OSS Gateワークショップが役立つ
宣伝:全文検索のことは
クリアコードに相談しよう!

More Related Content

PDF
RedmineのFAQとアンチパターン集
PDF
View customize pluginを使いこなす
PDF
View customize plugin for Redmineの紹介 (2019年版)
PDF
Redmine にいろいろ埋め込んでみた
PDF
ある工場の Redmine 2022 〜ある工場の Redmine 5.0 バージョンアップ〜 ( Redmine of one plant 2022 ...
PDF
Redmineとgitの 連携利用事例
PDF
Redmine issue assign notice plugin の紹介
PDF
View Customize Pluginで出来ること
RedmineのFAQとアンチパターン集
View customize pluginを使いこなす
View customize plugin for Redmineの紹介 (2019年版)
Redmine にいろいろ埋め込んでみた
ある工場の Redmine 2022 〜ある工場の Redmine 5.0 バージョンアップ〜 ( Redmine of one plant 2022 ...
Redmineとgitの 連携利用事例
Redmine issue assign notice plugin の紹介
View Customize Pluginで出来ること

What's hot (20)

PDF
Redmineプラグイン導入・開発入門
PDF
REST API のコツ
PDF
Redmineの画面をあなた好みにカスタマイズ - View customize pluginの紹介 - Redmine Japan 2020
PDF
ソーシャルゲームのためのデータベース設計
PDF
Redmine 5.0 + RedMica 2.1 新機能評価ガイド
PDF
Javaのログ出力: 道具と考え方
PDF
Redmine 4.2で作るヘルプデスク向け問い合わせ受付・管理システム
PDF
挫折しないRedmine
PPTX
Redmineカスタムフィールド表示改善
PPTX
Rootlessコンテナ
PDF
DockerとPodmanの比較
PPTX
開発環境の認証を改善して Redmineを社内標準にした話
PDF
Redmineチューニングの実際と限界(旧資料) - Redmine performance tuning(old), See Below.
PDF
Redmineを快適に使うためのおすすめ初期設定
PDF
うちのRedmineの使い方(2)
PDF
新入社員のための大規模ゲーム開発入門 サーバサイド編
PDF
Dockerからcontainerdへの移行
PDF
とあるメーカーのRedmine活用事例
PDF
ドメイン駆動設計 基本を理解する
PDF
Dockerfile を書くためのベストプラクティス解説編
Redmineプラグイン導入・開発入門
REST API のコツ
Redmineの画面をあなた好みにカスタマイズ - View customize pluginの紹介 - Redmine Japan 2020
ソーシャルゲームのためのデータベース設計
Redmine 5.0 + RedMica 2.1 新機能評価ガイド
Javaのログ出力: 道具と考え方
Redmine 4.2で作るヘルプデスク向け問い合わせ受付・管理システム
挫折しないRedmine
Redmineカスタムフィールド表示改善
Rootlessコンテナ
DockerとPodmanの比較
開発環境の認証を改善して Redmineを社内標準にした話
Redmineチューニングの実際と限界(旧資料) - Redmine performance tuning(old), See Below.
Redmineを快適に使うためのおすすめ初期設定
うちのRedmineの使い方(2)
新入社員のための大規模ゲーム開発入門 サーバサイド編
Dockerからcontainerdへの移行
とあるメーカーのRedmine活用事例
ドメイン駆動設計 基本を理解する
Dockerfile を書くためのベストプラクティス解説編
Ad

Viewers also liked (20)

PDF
[DO05] システムの信頼性を上げるための新しい考え方 SRE ( Site Reliability Engineering ) in Azure, o...
PDF
AWS クックパッドの運用事例
PPT
第6回 itil講義資料
PDF
仕事に活きる数学講座(第四回:予測力編)
PDF
手っ取り早くプロジェクトをなんとかしたい人のためのnanapi流ツール活用術~WebSig会議 vol.34「Webディレクター必見!プロジェクトを成功に...
PDF
Cookpad TechConf 2016 - DWHに必要なこと
PDF
実務で活かせる AWSアーキテクチャ設計 〜AWS re:Invent 2016アップデート最新版〜
PDF
クラウド運用のベストプラクティスを考える - OpenStack最新情報セミナー(2016年12月)
PDF
仕事の成果は「聞き方」で9割決まる
PDF
クックパッドの開発プロセス
PDF
今年のOss業界10大ニュース
PPTX
オブジェクト指向を学んで図解力、仕事力アップ
PDF
日々の気づきをふりかえり、 個人とチームの成長につなげる方法
PDF
4時間で学ぶ、効率的な自動テストスクリプトのメンテナンス
PPTX
5分で分かるサイボウズのSRE
PDF
Cookpadの料理画像を分類した話
PPTX
hbstudy 74 Site Reliability Engineering
PDF
いまの Office 365 ってこんな感じ?
PDF
ITサービスマネジメントとSRE
PPTX
技術者の自分が11年間会社を経営して学んだ7つのこと
[DO05] システムの信頼性を上げるための新しい考え方 SRE ( Site Reliability Engineering ) in Azure, o...
AWS クックパッドの運用事例
第6回 itil講義資料
仕事に活きる数学講座(第四回:予測力編)
手っ取り早くプロジェクトをなんとかしたい人のためのnanapi流ツール活用術~WebSig会議 vol.34「Webディレクター必見!プロジェクトを成功に...
Cookpad TechConf 2016 - DWHに必要なこと
実務で活かせる AWSアーキテクチャ設計 〜AWS re:Invent 2016アップデート最新版〜
クラウド運用のベストプラクティスを考える - OpenStack最新情報セミナー(2016年12月)
仕事の成果は「聞き方」で9割決まる
クックパッドの開発プロセス
今年のOss業界10大ニュース
オブジェクト指向を学んで図解力、仕事力アップ
日々の気づきをふりかえり、 個人とチームの成長につなげる方法
4時間で学ぶ、効率的な自動テストスクリプトのメンテナンス
5分で分かるサイボウズのSRE
Cookpadの料理画像を分類した話
hbstudy 74 Site Reliability Engineering
いまの Office 365 ってこんな感じ?
ITサービスマネジメントとSRE
技術者の自分が11年間会社を経営して学んだ7つのこと
Ad

More from Kouhei Sutou (20)

PDF
RubyKaigi 2022 - Fast data processing with Ruby and Apache Arrow
PDF
Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021
PDF
RubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache Arrow
PDF
Rubyと仕事と自由なソフトウェア
PDF
Apache Arrowフォーマットはなぜ速いのか
PDF
Apache Arrow 1.0 - A cross-language development platform for in-memory data
PDF
Apache Arrow 2019
PDF
Redmine検索の未来像
PDF
Apache Arrow - A cross-language development platform for in-memory data
PDF
Better CSV processing with Ruby 2.6
PDF
Apache Arrow
PDF
Apache Arrow - データ処理ツールの次世代プラットフォーム
PDF
Apache Arrow
PDF
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
PDF
MySQL 8.0でMroonga
PDF
My way with Ruby
PDF
Red Data Tools
PDF
Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!
PDF
MariaDBとMroongaで作る全言語対応超高速全文検索システム
PDF
PGroonga 2 – Make PostgreSQL rich full text search system backend!
RubyKaigi 2022 - Fast data processing with Ruby and Apache Arrow
Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021
RubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache Arrow
Rubyと仕事と自由なソフトウェア
Apache Arrowフォーマットはなぜ速いのか
Apache Arrow 1.0 - A cross-language development platform for in-memory data
Apache Arrow 2019
Redmine検索の未来像
Apache Arrow - A cross-language development platform for in-memory data
Better CSV processing with Ruby 2.6
Apache Arrow
Apache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL 8.0でMroonga
My way with Ruby
Red Data Tools
Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!
MariaDBとMroongaで作る全言語対応超高速全文検索システム
PGroonga 2 – Make PostgreSQL rich full text search system backend!

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

  • 1. 全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1 全文検索で Redmineを さらに活用! 須藤功平 株式会社クリアコード Redmine大阪 第17回勉強会 2017-08-26
  • 2. 全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1 よく活用されたRedmine 情報の宝庫 問題解決の経緯 Wikiに整理したノウハウ
  • 3. 全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1 さらに活用するために 必要なときに 必要な情報に 素早くアクセスしたい!
  • 4. 全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1 活用方法:検索!
  • 5. 全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1 活用の壁 よく活用されたRedmine 大量の情報(ただし玉石混合) さらに活用するための課題 大量→必要な情報を見つけにくい 大量→探す時間が増える
  • 6. 全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1 課題例1:検索ノイズが多い これ以外全部ノイズ
  • 7. 全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1 課題例2:検索が遅い 本当に大量だとね! ↓これくらいだと遅くない チケット数:4049 コメント数:41264 Wikiページ数:1081 1秒以内に返ってくる キャッシュが効く:0.1sくらい キャッシュが効かない:0.7sくらい
  • 8. 全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1 解決策 Groongaで Redmineを 高速・高精度 全文検索
  • 9. 全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1 解決例1:検索ノイズがない 全部それっぽい!
  • 10. 全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1 検索ノイズ? 上位N件でがっかりする? がっかり→ノイズ多い ユーザーは上位N件しか確認しない Groongaはスコアを調整してソート 件数は関係ない 実はこの例ではヒット件数は同じ
  • 11. 全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1 解決例2:検索が速い ↓これくらいだと誤差 チケット数:4049 コメント数:41264 Wikiページ数:1081 参考: 既存(キャッシュあり)と Groonga(キャッシュなし)が 同じくらい
  • 12. 全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1 200万チケットのケース https://twitter.com/akahane92/status/733832496945594368
  • 13. 全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1 ここまでのまとめ Redmineをさらに活用したい! 素早く必要な情報にアクセス! 検索をがんばらないと! Groongaで全文検索! 検索ノイズが少ない! 速い!
  • 14. 全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1 ここからの話 導入したくなる 情報を紹介
  • 15. 全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1 インストール:RDBMS 対応RDBMS MySQLもPostgreSQLも! RDBMSにGroonga対応 プラグインをインストール プラグイン:別途サービス管理不要→運用コスト増加な し MySQL:Mroonga PostgreSQL:PGroonga
  • 16. 全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1 インストール:Mroonga http://mroonga.org/ja/docs/install.html パッケージで簡単インストール 対応プラットフォーム Debian GNU/Linux, Ubuntu CentOS Fedora macOS Windows
  • 17. 全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1 インストール:PGroonga https://pgroonga.github.io/ja/install/ パッケージで簡単インストール 対応プラットフォーム Debian GNU/Linux, Ubuntu CentOS Fedora macOS Windows
  • 18. 全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1 インストール:プラグイン % cd redmine % git clone https://github.com/okkez/redmine_full_text_search.git plugins/full_text_search % bin/rake redmine:plugins RAILS_ENV=production 再起動で完了!
  • 19. 全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1 高度な検索1:AND/OR/NOT キーワード単位でのAND/OR/NOT 従来:AND/ORのみ 従来:キーワード全体で切り替え 例: (Groonga OR Mroonga) -PostgreSQL GroongaまたはMroongaを含むが PostgreSQLは含まない
  • 20. 全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1 高度な検索2 キーワード単位の優先度 重要語のスコアを上げ下げ 例: Groonga (>MySQL OR <PostgreSQL) 「GroongaとMySQL」または 「GroongaとPostgresSQL」を含む MySQLの方がPostgreSQLより重要
  • 21. 全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1 高度な検索2 キーワード単位の優先度 ノイズ語のスコアを下げる 例: Groonga ~MySQL Groongaを含む MySQLを含んでいてもヒットする MySQLを含むとスコアが下がる
  • 22. 全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1 高度な検索3:並び順の変更 ソート対象:スコア・更新時刻 従来:更新時刻のみ ソート順:昇順・降順 従来:降順のみ
  • 23. 全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1 並び順の変更UI
  • 24. 全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1 ここまでのまとめ 簡単にインストールできる 運用も楽 AND/OR/NOTを使える 絞り込みに便利 並び順をカスタマイズできる スコアと更新時刻で十分
  • 25. 全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1 2017年5月以降の話 redmine.tokyo 第12回勉強会 2017年5月 ノイズが少なくて高速 その後 高速化 類似issue検索対応
  • 26. 全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1 高速化 旧 LIKE検索をGroongaに置き換え 他の条件はそのまま 新 すべてGroongaで検索 高速・柔軟・高度な検索をサポート
  • 27. 全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1 データの扱い 旧 正規化してデータを保存 検索時に複数回のSELECT 新 1つのテーブルにデータを保存 1回のSELECTで検索(速い)
  • 28. 全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1 柔軟 ドリルダウンで対象を分別 チケットn件・Wikiページn件とか 標準でもあるやつ ハイライト・スニペット 標準よりもいい感じ 類似文書検索
  • 29. 全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1 類似文書検索 活用例 類似issue検索 実装着手 類似Wiki検索 未実装
  • 30. 全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1 類似issue検索
  • 31. 全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1 類似issue:ユースケース 新しい問題が発生! あれ?どこかで見たような… プラグイン: 「このissue、似ていませんか?」 →問題の早期解決!
  • 32. 全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1 類似issue検索:現実装 issue閲覧時 自動で類似issueを提示 Groonga内のデータを活用 テキストデータで類似文書検索 精度 まぁまぁ
  • 33. 全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1 ここからの話 今後の野望
  • 34. 全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1 類似issue検索精度向上 メタデータを活用 手動設定の関連issue情報使用 属性情報使用 カテゴリとかトラッカーとか 同一プロジェクトに限定する Wikiも対象に加える
  • 35. 全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1 類似issue検索精度向上 機械学習技術を活用 字面でなく意味で類似文書検索 例:メールのthreadとプログラムの threadは違う 例:MroongaでMySQLも類似度向上 回答の自動生成 RNNを用いた機械翻訳とか 類似issueの結論を探さなくてよい
  • 36. 全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1 データ活用に向けて GroongaにPython組込 Rubyでデータ処理 Red Data Tools Apache Arrow 次世代データ交換フォーマット コミッターになった!
  • 37. 全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1 類似issue 共同開発組織募集 精度向上にはデータが不可欠 データを持っていそうな組織 大量ユーザー・長期間運用組織 マネージドサービス提供組織 Redmine内データを活用したい 組織はぜひ!
  • 38. 全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1 添付ファイル内全文検索 現状:ファイル名と説明 テキスト抽出できれば検索可能 テキスト抽出ツール例:ChupaText Groongaプロジェクトのテキスト抽出ツール
  • 39. 全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1 添付ファイル内全文検索 実装案 テキスト抽出部分をプラグイン できるようにすればRedmine本 体に入れられるのでは!? ChupaTextよりApache Tikaを使いた い人もいそう 検索はLIKEでよい Groongaプラグインを入れたら高速になる、でよい だれかチャレンジしない?
  • 40. 全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1 入力補完 検索ボックス 入力に応じてキーワードを随時提示 ↑ヒットするもののみ 各種入力欄(タイトルなど) 入力に応じて既存内容を随時提示 ローマ字でインクリメンタルサーチ
  • 41. 全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1 入力補完:ユースケース 検索ボックス 自然と適切な検索に誘導! 例:typoを防ぐ・表記揺れを吸収 各種入力欄 自然と表記を統一! →検索しやすい・理解しやすい 例:typoを防ぐ・表記揺れを吸収
  • 42. 全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1 入力補完:実装 Groonga内のデータを活用 どのくらいヒットするキーワード? ログも活用:検索頻度は? メタデータも活用: プロジェクト・トラッカー毎に 文脈をわける 開発協力者を募集 実装・データ提供・発注など
  • 43. 全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1 同義語展開 表記揺れを吸収 例:「打ち合わせ」・「打合せ」 吸収:「打ち合わせ OR 打合せ」 同義語は管理が大変! 文脈で異なる!増減する! 同義語管理を支援 例:同義語候補を自動生成
  • 44. 全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1 同義語展開:ユースケース 検索ボックス 欲しい情報にたどり着ける! 表記揺れによる未発見を解消 同義語管理のコスト削減 Redmine内のデータを より低コストで有効活用!
  • 45. 全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1 同義語展開:実装 Groongaの組み込み機能を活用 高速に同義語展開が可能 同義語候補を機械学習 Groonga内のデータを活用 開発協力者を募集 実装・データ提供・発注など
  • 46. 全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1 スマートナビ(仮) 言わなくても欲しいものを提示 例:駅の近くでスマホを見る →その駅の時刻表を自動で表示 ポイント:ユーザーは 「駅名 時刻表」で 明示的に検索していない!
  • 47. 全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1 スマートナビ:ユースケース .oO(打ち合わせのアジェンダ をWikiにまとめておこう) Redmine:ホーム画面に該当Wikiペ ージのリンクを表示
  • 48. 全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1 スマートナビ:実装 行動履歴から知識を学習 打ち合わせ前にいつもWikiを更新 内容から事実を収集 Wikiページ内のテキスト 「参加者:○○…」から抽出 開発協力者を募集 実装・データ提供・発注など
  • 49. 全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1 ここまでのまとめ このプラグインの現状 Redmineの不便を解消 (マイナスを少しプラスに) このプラグインの今後 Redmineをさらに有効活用! (少しプラスをすごくプラスに)
  • 50. 全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1 ここからの話 Redmineの開発に 参加しよう!
  • 51. 全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1 開発に参加? Redmine本体のコードを書く だけじゃない バグレポート・テスト・issue対応 ドキュメント作成・宣伝 プラグインを作る だけじゃない 本体と同様↑のことも大事な開発
  • 52. 全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1 開発の参加例 Groongaプラグイン開発時の 知見をフィードバック Defect #21993: サイズ上限が小 Patch #23153: フックを追加 Feature #25198: スコアを表示
  • 53. 全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1 敷居が高そう? OSS Gateワークショップへ 参加してみよう 「OSS開発に参加」を経験できる (Redmineもプラグインの多くもOSS!) (もちろんこのプラグインもGroongaもOSS!) https://oss-gate.doorkeeper.jp/
  • 54. 全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1 添付ファイル内全文検索を 実装したい! 私に相談だ!
  • 55. 全文検索で Redmineを さらに活用! Powered by Rabbit 2.2.1 まとめ Redmineをさらに活用するなら Groongaプラグインを使おう! Redmineの開発に参加しよう! OSS Gateワークショップが役立つ 宣伝:全文検索のことは クリアコードに相談しよう!