Text
Page: 1
Groongaで Redmineを 高速全文検索 須藤功平 株式会社クリアコード redmine.tokyo第12回勉強会 2017-05-13 Groongaで Redmineを 高速全文検索 Powered by Rabbit 2.2.1
Page: 2
よく活用されたRedmine 情報の宝庫 問題解決の経緯 Wikiに整理したノウハウ Groongaで Redmineを 高速全文検索 Powered by Rabbit 2.2.1
Page: 3
さらに活用するために 必要なときに 必要な情報に 素早くアクセスしたい! Groongaで Redmineを 高速全文検索 Powered by Rabbit 2.2.1
Page: 4
活用方法:検索! Groongaで Redmineを 高速全文検索 Powered by Rabbit 2.2.1
Page: 5
活用の壁 よく活用されたRedmine 大量の情報(ただし玉石混合) さらに活用するための課題 大量→必要な情報を見つけにくい 大量→探す時間が増える Groongaで Redmineを 高速全文検索 Powered by Rabbit 2.2.1
Page: 6
課題例1:検索ノイズが多い これ以外全部ノイズ Groongaで Redmineを 高速全文検索 Powered by Rabbit 2.2.1
Page: 7
課題例2:検索が遅い 本当に大量だとね! ↓これくらいだと遅くない チケット数:3629 コメント数:35721 Wikiページ数:1016 1秒以内に返ってくる Groongaで Redmineを 高速全文検索 Powered by Rabbit 2.2.1
Page: 8
解決策 Groongaで Redmineを 高速・高精度 全文検索 Groongaで Redmineを 高速全文検索 Powered by Rabbit 2.2.1
Page: 9
解決例1:検索ノイズがない 全部それっぽい! Groongaで Redmineを 高速全文検索 Powered by Rabbit 2.2.1
Page: 10
検索ノイズ? 上位N件でがっかりする? がっかり→ノイズ多い ユーザーは上位N件しか確認しない Groongaはスコアを調整してソート 件数は関係ない 実はこの例ではヒット件数は同じ Groongaで Redmineを 高速全文検索 Powered by Rabbit 2.2.1
Page: 11
解決例2:検索が速い ↓これくらいだと誤差 チケット数:3629 コメント数:35721 Wikiページ数:1016 Groongaで Redmineを 高速全文検索 Powered by Rabbit 2.2.1
Page: 12
200万チケットのケース https://twitter.com/akahane92/status/733832496945594368 Groongaで Redmineを 高速全文検索 Powered by Rabbit 2.2.1
Page: 13
ここまでのまとめ Redmineをさらに活用したい! 素早く必要な情報にアクセス! 検索をがんばらないと! Groongaで全文検索! 検索ノイズが少ない! 速い! Groongaで Redmineを 高速全文検索 Powered by Rabbit 2.2.1
Page: 14
ここからの話 導入したくなる 情報を紹介 Groongaで Redmineを 高速全文検索 Powered by Rabbit 2.2.1
Page: 15
インストール:RDBMS 対応RDBMS MySQLもPostgreSQLも! RDBMSにGroonga対応 プラグインをインストール プラグイン:別途サービス管理不要→運用コスト増加な し MySQL:Mroonga PostgreSQL:PGroonga Groongaで 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 Groongaで Redmineを 高速全文検索 Powered by Rabbit 2.2.1
Page: 17
インストール:PGroonga https://pgroonga.github.io/ja/install/ パッケージで簡単インストール 対応プラットフォーム Debian GNU/Linux, Ubuntu CentOS Fedora macOS Windows Groongaで Redmineを 高速全文検索 Powered by Rabbit 2.2.1
Page: 18
設定:PGroonga Redmine用のユーザーに PGroongaを使う権限を付与 CREATE EXTENSION pgroonga; GRANT USAGE ON pgroonga TO ユーザー名; Groongaで Redmineを 高速全文検索 Powered by Rabbit 2.2.1
Page: 19
インストール:プラグイン % cd redmine % git clone \ https://github.com/okkez/redmine_full_text_search.git \ plugins/full_text_search % bin/rake redmine:plugins RAILS_ENV=production 再起動で完了! Groongaで Redmineを 高速全文検索 Powered by Rabbit 2.2.1
Page: 20
高度な検索1:AND/OR/NOT キーワード単位でのAND/OR/NOT 従来:AND/ORのみ 従来:キーワード全体で切り替え 例: (Groonga OR Mroonga) -PostgreSQL GroongaまたはMroongaを含むが PostgreSQLは含まない Groongaで Redmineを 高速全文検索 Powered by Rabbit 2.2.1
Page: 21
高度な検索2:並び順の変更 ソート対象:スコア・更新時刻 従来:更新時刻のみ ソート順:昇順・降順 従来:降順のみ Groongaで Redmineを 高速全文検索 Powered by Rabbit 2.2.1
Page: 22
並び順の変更UI Groongaで Redmineを 高速全文検索 Powered by Rabbit 2.2.1
Page: 23
ここまでのまとめ 簡単にインストールできる 運用も楽 AND/OR/NOTを使える 絞り込みに便利 並び順をカスタマイズできる スコアと更新時刻で十分 Groongaで Redmineを 高速全文検索 Powered by Rabbit 2.2.1
Page: 24
ここからの話 今後の野望 Groongaで Redmineを 高速全文検索 Powered by Rabbit 2.2.1
Page: 25
類似issue検索 issue作成時・閲覧時 自動で類似issueを提示 手動設定の関連issueとは別 類似しているかは計算する Groongaで Redmineを 高速全文検索 Powered by Rabbit 2.2.1
Page: 26
類似issue:ユースケース 新しい問題が発生! あれ?どこかで見たような… プラグイン: 「このissue、似ていませんか?」 →問題の早期解決! Groongaで Redmineを 高速全文検索 Powered by Rabbit 2.2.1
Page: 27
類似issue検索:実装 Groonga内のデータを活用 テキストデータだけでなく メタデータも活用 メタデータ例:関連issue 開発協力者を募集 実装・データ提供・発注など Groongaで Redmineを 高速全文検索 Powered by Rabbit 2.2.1
Page: 28
入力補完 検索ボックス 入力に応じてキーワードを随時提示 ↑ヒットするもののみ 各種入力欄(タイトルなど) 入力に応じて既存内容を随時提示 ローマ字でインクリメンタルサーチ Groongaで Redmineを 高速全文検索 Powered by Rabbit 2.2.1
Page: 29
入力補完:ユースケース 検索ボックス 自然と適切な検索に誘導! 例:typoを防ぐ・表記揺れを吸収 各種入力欄 自然と表記を統一! →検索しやすい・理解しやすい 例:typoを防ぐ・表記揺れを吸収 Groongaで Redmineを 高速全文検索 Powered by Rabbit 2.2.1
Page: 30
入力補完:実装 Groonga内のデータを活用 どのくらいヒットするキーワード? ログも活用:検索頻度は? メタデータも活用: プロジェクト・トラッカー毎に 文脈をわける 開発協力者を募集 実装・データ提供・発注など Groongaで Redmineを 高速全文検索 Powered by Rabbit 2.2.1
Page: 31
同義語展開 表記揺れを吸収 例:「打ち合わせ」・「打合せ」 吸収:「打ち合わせ OR 打合せ」 同義語は管理が大変! 文脈で異なる!増減する! 同義語管理を支援 例:同義語候補を自動生成 Groongaで Redmineを 高速全文検索 Powered by Rabbit 2.2.1
Page: 32
同義語展開:ユースケース 検索ボックス 欲しい情報にたどり着ける! 表記揺れによる未発見を解消 同義語管理のコスト削減 Redmine内のデータを より低コストで有効活用! Groongaで Redmineを 高速全文検索 Powered by Rabbit 2.2.1
Page: 33
同義語展開:実装 Groongaの組み込み機能を活用 高速に同義語展開が可能 同義語候補を機械学習 Groonga内のデータを活用 開発協力者を募集 実装・データ提供・発注など Groongaで Redmineを 高速全文検索 Powered by Rabbit 2.2.1
Page: 34
スマートナビ(仮) 言わなくても欲しいものを提示 例:駅の近くでスマホを見る →その駅の時刻表を自動で表示 ポイント:ユーザーは 「駅名 時刻表」で 明示的に検索していない! Groongaで Redmineを 高速全文検索 Powered by Rabbit 2.2.1
Page: 35
スマートナビ:ユースケース .oO(打ち合わせのアジェンダ をWikiにまとめておこう) Redmine:ホーム画面に該当Wikiペ ージのリンクを表示 Groongaで Redmineを 高速全文検索 Powered by Rabbit 2.2.1
Page: 36
スマートナビ:実装 行動履歴から知識を学習 打ち合わせ前にいつもWikiを更新 内容から事実を収集 Wikiページ内のテキスト 「参加者:○○…」から抽出 開発協力者を募集 実装・データ提供・発注など Groongaで Redmineを 高速全文検索 Powered by Rabbit 2.2.1
Page: 37
ここまでのまとめ このプラグインの現状 Redmineの不便を解消 (マイナスを少しプラスに) このプラグインの今後 Redmineをさらに有効活用! (少しプラスをすごくプラスに) Groongaで Redmineを 高速全文検索 Powered by Rabbit 2.2.1
Page: 38
ここからの話 Redmineの開発に 参加しよう! Groongaで Redmineを 高速全文検索 Powered by Rabbit 2.2.1
Page: 39
開発に参加? Redmine本体のコードを書く だけじゃない バグレポート・テスト・issue対応 ドキュメント作成・宣伝 プラグインを作る だけじゃない 本体と同様↑のことも大事な開発 Groongaで Redmineを 高速全文検索 Powered by Rabbit 2.2.1
Page: 40
開発の参加例 Groongaプラグイン開発時の 知見をフィードバック Defect #21993: サイズ上限が小 Patch #23153: フックを追加 Feature #25198: スコアを表示 Groongaで Redmineを 高速全文検索 Powered by Rabbit 2.2.1
Page: 41
敷居が高そう? OSS Gateワークショップへ 参加してみよう 「OSS開発に参加」を経験できる (Redmineもプラグインの多くもOSS!) (もちろんこのプラグインもGroongaもOSS!) https://oss-gate.doorkeeper.jp/ Groongaで Redmineを 高速全文検索 Powered by Rabbit 2.2.1
Page: 42
まとめ Redmineをさらに活用するなら Groongaプラグインを使おう! Redmineの開発に参加しよう! OSS Gateワークショップが役立つ 宣伝:全文検索のことは クリアコードに相談しよう! Groongaで Redmineを 高速全文検索 Powered by Rabbit 2.2.1









































