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