株式会社クリアコード > ククログ

ククログ

タグ:

【徳丸浩と学ぶビジネスセミナー】WordPressのセキュリティと全文検索について学ぶ!【Mroonga対応】- Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!

1ヶ月半前の話をようやくまとめている須藤です。

2月9日(年に一度の肉の日!)に【徳丸浩と学ぶビジネスセミナー】WordPressのセキュリティと全文検索について学ぶ!【Mroonga対応】でWordPressでMroongaをどう活用できるかを紹介してきました。

関連リンク:

内容

対象は全文検索をあまり知らないWordPressユーザーです。そのため、全文検索とは?からまとめています。

単に全文検索とは?だけでなく、全文検索をどうやってWordPressで活用するかについてもまとめています。ザックリ言うとサイト内回遊率向上ですが、どう活用すれば向上につながるかをいろいろまとめています。

まとめ

WordPressで全文検索を活用することについて紹介しました。ぜひ、この資料を参考にWordPressで全文検索を活用してみてください。

なんと、この続編として、2018年3月29日にWordPressのMroongaプラグインを改良しよう!というイベントがあります。

「WordPressのMroongaプラグイン」というのはWordPressからMroongaを使うための「WordPressのプラグイン」です。WordPressのプラグインページにもMroongaとして登録してあります。

Mroonga」というのは(WordPressではなく)MySQL・MariaDBのプラグインで、MySQL・MariaDBに高速な全文検索機能を追加します。

つまり、WordPressのMroongaプラグインとはWordPressに高速な全文検索機能を追加するもの、ということです。

WordPressの全文検索で困ったことがあり、有償サポートが必要な場合は、お問い合わせください。

タグ: Groonga
2018-03-29

第一回 JPMUG DB勉強会 - MariaDBとMroongaで作る全言語対応超高速全文検索システム #JPMUG

1ヶ月半前の話をようやくまとめている須藤です。

1月30日に第一回 JPMUG DB勉強会でMroongaの使い方を紹介してきました。

関連リンク:

内容

対象は全文検索システムを作ったことがないMariaDBユーザーです。そのため、「全文検索システム」にはどんな機能が必要なのか、それを実現するには具体的にどんなSQLを書くことになるのか、ということをまとめた内容になっています。

また、事前に「日本語以外の言語にも対応するにはどうすればいいの?」という質問をもらっていたので、MariaDB・MroongaでのCOLLATION関連の話やUnicodeの話も少し含めています。

まとめ

第一回 JPMUG DB勉強会でMariaDBとMroongaを使って全文検索システムを実現する方法を説明しました。ぜひ、この資料を参考に全文検索システムを実現してみてください。

困ったことがあり、有償サポートが必要な場合は、お問い合わせください。

タグ: Groonga
2018-03-13

【KUSANAGI × Mroonga ハンズオン】KUSANAGIでWordPressのインストールからMroongaプラグインの実装まで学べる!【中級者向け】

WordPress+Mroongaプラグインを使った全文検索開発のハンズオンが開催されます。2018年2月より、KUSANAGIという超高速WordPress仮想マシンでMroongaプラグインがサポートされることになりました。KUSANAGIはAWSやAzureなどの多くのパブリッククラウドサービスに対応しており、無償で利用可能な仮想マシンです。Mroongaサポート開始を記念して、実際どのように(予定)開発すればMroongaプラグインを活用して全文検索機能を実装できるのか体験できるイベントが開催されます。

KUSANAGI + WordPress上で、Mroongaプラグインに「オートコンプリート」「関連記事検索」機能を追加し、動く状態まで皆さんとご一緒に開発します。2チームに分けて開発いたしますので、事前にどちらの機能を作りたいかをご検討のうえ来場ください。KUSANAGIやMroongaの経験がない方でも、スタッフと一緒に開発作業を行い、プラグイン機能を動く状態にできます。

詳しくはイベントページを参照してください。

イベントの概要は次の通りです。

  • 開催場所 : 日本マイクロソフト株式会社 品川本社 セミナールーム
  • 開催日程 : 3月29日(木) 13時30分~17時00分(開場13時00分)
  • 参加料金 : 無料
  • 共催 : 株式会社クリアコード、日本マイクロソフト株式会社、プライム・ストラテジー株式会社
  • 定員 : 20名
  • 協賛 : 一般社団法人PHP技術者認定機構
  • 当日は名刺を2枚お持ちください。

予定している実施内容は次の通りです。

  • プライム・ストラテジー ハンズオン(90分)
  • クリアコード代表 須藤 開発実践(90分)
タグ: Groonga
2018-03-12

PGConf.ASIA 2017 - PGroonga 2 – Make PostgreSQL rich full text search system backend! #pgconfasia

PGConf.ASIA 2017RUMの存在を知った須藤です。RUMはGINと違って完全転置索引にできるので全文検索用途によさそう。(Groongaは元から完全転置索引にできるのでずっと前からよかった。)

関連リンク:

内容

PostgreSQL Conference Japan 2017での内容にPGroonga 1.0.0からPGroonga 2へのアップグレード関連の話を盛り込んだ内容になっています。なお、PostgreSQL Conference Japan 2017での内容は次の昨日の実現方法を紹介でした。

  • 高速全文検索
  • それっぽい順でのソート
  • 検索結果表示画面で検索キーワードをハイライト
  • 検索結果表示画面で検索キーワード周辺テキストだけを表示
  • オートコンプリート(検索キーワードを少し入力したら補完する機能)
  • 類似文書検索(ブログの検索システムなら関連エントリーの表示に使える機能)
  • 同義語展開(表記揺れの吸収とかに使える機能)

これらの機能の実現方法はPostgreSQL Conference Japan 2017用の資料の方が参考にしやすいかもしれません。PGConf.ASIA 2017用の資料は英語(と日本語訳)でまとめていますが、PostgreSQL Conference Japan 2017用の資料は日本語でまとめているからです。

PGroongaを使うと全文検索システムのバックエンドとしてもPostgreSQLを活用できます。ぜひ活用してください!

まとめ

PGConf.ASIA 2017で、先日リリースしたPGroonga 2を紹介しました。PGroongaも使ってPostgreSQLをどんどん活用してください!もし、PGroonga関連でなにか相談したいことがある場合はお問い合わせください。

タグ: Groonga
2017-12-07

PostgreSQL Conference Japan 2017 - PGroonga 2 - PostgreSQLでの全文検索の決定版 #pgcon17j

PostgreSQL Conference Japan 2017の前にPGroonga 2のリリースアナウンスを出せた須藤です。間に合ってよかった。

PostgreSQL Conference Japan 2017でPGroonga 2を紹介しました。PGroongaを使ったことがない人向けの内容です。実際、聞いてくれた人たちはほとんど使ったことがない人ばかりでした。

関連リンク:

内容

PostgreSQLをバックエンドに「今っぽい」全文検索システムを作るためのPGroongaの使い方を紹介するという内容になっています。具体的には次の機能を実現する方法を紹介しています。

  • 高速全文検索
  • それっぽい順でのソート
  • 検索結果表示画面で検索キーワードをハイライト
  • 検索結果表示画面で検索キーワード周辺テキストだけを表示
  • オートコンプリート(検索キーワードを少し入力したら補完する機能)
  • 類似文書検索(ブログの検索システムなら関連エントリーの表示に使える機能)
  • 同義語展開(表記揺れの吸収とかに使える機能)

また、次のステップとして次の機能の実現方法にも触れています。

  • PDF・オフィス文書を検索対象にする方法
    • ファイルサーバーの全文検索システムで使える
  • ロジカルレプリケーション
    • 参照のスケールアウトで使える

PGroongaを使うとPostgreSQLをもっと活用できます。ぜひ活用してください!

おまけ

今回のスライド公開のタイミングでスライド公開サイトRabbit Slide Showにスライド中のリンクをクリックできる機能を追加しました。

たとえば、今回のスライドの最後のページにはお問い合わせ先のリンクがあるのですが、このリンクをクリックするとリンクを辿れるようになっています。

これはPopplerというPDFレンダリングライブラリー(フリーソフトウェア)とHTMLの<map>要素を組み合わせて実現しています。

まとめ

PostgreSQL Conference Japan 2017で、先日リリースしたPGroonga 2を紹介しました。PGroongaも使ってPostgreSQLをどんどん活用してください!もし、PGroonga関連でなにか相談したいことがある場合はお問い合わせください。

つづき: 2017-12-07
タグ: Groonga
2017-11-07

PHPカンファレンス2017 - PostgreSQLとPGroongaで作るPHPマニュアル高速全文検索システム - OSS Gate東京ワークショップ #phpcon2017

はじめてPHPカンファレンスに参加した須藤です。午前に「PostgreSQLとPGroongaで作るPHPマニュアル高速全文検索システム」という話をして、午後に「OSS Gate東京ワークショップ2017-10-08 - PHPカンファレンス2017会場編 -」を開催しました。

「PostgreSQLとPGroongaで作るPHPマニュアル高速全文検索システム」のスライドは次の通りです。発表後にオートコンプリートの候補を登録する方法を話し忘れたことに気づいたので追記しました。

動画もあります。

関連リンク:

背景

第115回 PHP勉強会@東京PGroongaのことを話す機会があったので、そのデモのためにPHPのマニュアルをPGroongaで全文検索するアプリケーションを作りました。作ってみたところ、PHPユーザーにも便利そうな気がしてきたので、使ってもらったり開発に参加してもらうとよさそうだなぁと思い、PHPカンファレンス2017でも紹介しました。後述するOSS Gateワークショップの開催も第115回 PHP勉強会@東京のときに相談した結果として実現できたので、とてもよい機会でした。

今回の発表では、第115回 PHP勉強会@東京での内容に次の内容を加えました。

  • 類似マニュアル検索の実現方法
  • 同義語展開の実現方法

今回の発表の成果は悪くないです。このPHPマニュアル検索システムの開発に参加する人は増えていないのですが、この検索システムを運用してもらえることになりました!

PHPユーザーで、(PGroongaではなく)MroongaユーザーでもあるWEICさんが運営することになりました!今月中の運用開始を目指しています。URLは以下になる予定です。

運用が始まったら、おそらくWEICさんのお知らせページで告知されるので、チェックしてください!

簡単に使えるようになったらユーザーも開発者も増えることを期待しています。

そうそう、WEICさんはPHPエンジニアを大募集中だそうです!

OSS Gateワークショップ

午後は2時間45分の枠をもらってOSS Gateワークショップを開催しました。(終了時間を勘違いしていて25分早く終わらせてしまいました。。。)

このワークショップには通常バージョンとショートバージョンがあり、通常バージョンは5,6時間、ショートバージョンは2,3時間です。今回は3時間弱の枠だったのでショートバージョンで開催しました。

ショートバージョンは過去にOSS Gate東京ワークショップ for Mastodon in ピクシブ 2017-06-29で実施していて、今回もそれと同じように進めました。通常バージョンからの差は次の通りです。

  • できるだけ事前に対象OSSを決める
  • ミニふりかえりなし
    • 進行役・サポートメンターが随時まわってミニふりかえり的なことをしていく
  • 「ユーザーとして動かす」と「フィードバック」の時間を一緒にする
    • フィードバックポイントが見つかったらすぐにフィードバックに取り組む

今回、私が終了時間を勘違いしていたため最後のアンケートとふりかえりも省略しました。アンケートとふりかえりをやる時間はあったので失敗でした。

今回は時間内にフィードバックまでいけた人はほとんどいませんでした。フィードバックポイントに気づくところまではほとんどの人が経験していたので、フィードバックをまとめる時間が足りなかったということになります。予想した要因は次の通りです。

  • サポーター1人でビギナー2人だとサポートが手薄
    • ピクシブさんで開催したときはサポーター1人でビギナー1人だった
    • ビギナーの人がもう少しサポートを厚くできると時間を短くできそう

試してみたいことは次の通りです。

  • サポーター2人でビギナー3人をサポート
  • サポーター1人でビギナー2人をサポートするけど、サポーター2人つきサポートメンターが1人サポート
    • 今回はサポーター4人につきサポートメンターが1人サポート

今回、初めてPHP関連のOSS限定のOSS Gateワークショップを開催しました。今回だけで終わりにせずに今回が始まりにしていきたいので、PHP関連のOSSの開発に参加する人が増えるとうれしいという人はぜひ一緒にやっていきましょう!Gitterのoss-gate/tokyo-phpでオンラインで相談しています。まずはここに来てください!現状は、今回ワークショップに参加した人と次回の開催について相談するところです。

まとめ

PHPカンファレンス2017で、PGroongaの話をして、OSS Gateワークショップも開催しました。今回の機会をぜひ今後につなげていきたいです。

タグ: Groonga
2017-10-10

db tech showcase Tokyo 2017 - MySQL・PostgreSQLだけで作る高速でリッチな全文検索システム #dbts2017

この発表のためにmroonga_query_expand()を実装した須藤です。db tech showcase Tokyo 2017で「MySQL・PostgreSQLだけで作る高速でリッチな全文検索システム」という話をしました。一昔前の全文検索システムはそこそこ速く全文検索してキーワードをハイライト表示できれば普通でしたが、最近の全文検索システムはそれだけだと機能不足で、オートコンプリートやクエリー展開や関連エントリー表示機能などがあって普通というくらいにユーザーの要求レベルがあがっています。これは、GoogleやAmazonなど便利な検索サービスに慣れたユーザーが増えたためです。そんな時代の変化に対応できる全文検索エンジンがGroongaです。GroongaはMySQL・MariaDB・PostgreSQLから使えるためSQLを使って簡単にイマドキの全文検索システムを実装できます。しかも、運用も楽です。そんな話です。

関連リンク:

内容

まず、どういうときにMroonga・PGroongaを使うアプローチを選べばよいかという指針を示しました。

  • 全文検索の知識ナシ
    • 全文検索だけできれば十分
      • データが少ない(数十万件とか):RDBMSでLIKE
      • データが多い:Mroonga・PGroonga
    • イマドキの機能が必要
      • Mroonga・PGroonga
  • 全文検索の知識アリ
    • カリカリにチューニングしたい
      • RDBMS + 全文検索サーバー
    • それ以外
      • Mroonga・PGroonga

次に、以下の機能をMroonga・PGroongaで実現するにはどういうSQLを使えばよいか説明しました。

  • 全文検索
  • キーワードハイライト
  • 周辺テキスト表示
  • 入力補完
  • 同義語展開
  • 関連文書の表示

最後に、次のステップとして構造化データ(オフィス文書・HTML・PDFなど)の対応方法について少し言及しました。Groongaプロジェクトは構造化データからテキスト・メタデータ・スクリーンショットを取得するツールとしてChupaTextを開発しています。コマンドラインでもHTTP経由でもライブラリーとしても使えます。HTTP経由で使う場合はDocker・Vagrantを使うのが便利です。依存ライブラリーを揃える手間がないからです。

まとめ

Mroonga・PGroongaを使ってイマドキの全文検索システムを実装する方法を紹介しました。コンサルティングやチューニングや開発支援などを提供するサポートサービスがあります。社外秘のデータでお困りの場合はお問い合わせください。NDAを結んだ上で対応できます。

Mroongaはインサイト・テクノロジーさんが進めているPinkshiftでも活用されています。MySQL・MariaDB・PGroongaで高速全文検索が必要ならMroonga・PGroongaを試してみてください。

タグ: Groonga
2017-09-08

Zulip & PGroonga Night - PGroonga & Zulip #zpnight

ZulipPGroongaサポートを実装した須藤です。PyCon JP 2017に参加するためにZulipの開発者の1人であるGregさんが来ていたので、日本PostgreSQLユーザ会(JPUG)さんに主催してもらってZulipとPGroongaのイベント「Zulip & PGroonga Night」を開催しました。

なお、GregさんのPyConJP 2017でのトーク「Clearer Code at Scale: Static Types at Zulip and Dropbox」(動画)はPyConJP 2017のベストトークに選ばれました。すごい!

Zulip & PGroonga NightではPGroongaの紹介とZulipの全文検索インデックスの更新方法の紹介をしました。

関連リンク:

背景

ZulipではPostgreSQL標準のtextsearchを使って全文検索を実現しています。textsearchは言語特化型のインデックスを作るため、同時に複数の言語をサポートすることができません。また、日本語を含むアジア圏の言語のサポートが不十分なため、日本語を全文検索できないという問題もあります。

そこで、私はZulipでPGroongaを使えるようにしました。PGroongaは言語特化型のインデックスも言語非依存のインデックスも作れます。言語非依存のインデックスを作れば同時に日本語も英語もいい感じに全文検索できます。

クリアコードがZulipを選んだ理由

私がZulipにPGroongaサポートパッチを送ったのは自分たちが必要だからです。クリアコードではチャットツールとしてZulipを使っています。その前はSkypeを使っていました。お客さんとの連絡でSkypeを使う必要があったため、その流れでなんとなく使っていました。Skypeはあまり活用していませんでした。

クリアコードはフリーソフトウェアを推進したい会社なのでフリーソフトウェアではないSkypeを使っていることをどうにかしたいと考えていました。そこで、いくつかフリーソフトウェアなチャットツールを検討しました。そのうちの1つがZulipでした。Zulipのネックは日本語全文検索できないことでした。ネックがあるので選択肢から外すという考え方もあると思いますが、私たちは、自分たちで日本語全文検索できるようにして使うことにしました。フリーソフトウェアのよいところは自分たちで改良できることだからです。

Zulipの全文検索インデックスの更新方法

Zulipは書き込み時のレイテンシーを小さくしておくために工夫をしています。チャットアプリケーションでは書き込みがすぐに終わることはよい使い勝手に直結するからです。

書き込み時はデータをPostgreSQLに書き込むだけで、全文検索インデックスの更新は別途バックグラウンドで実行します。このためにトリガーとNOTIFYLISTENを使っています。

具体的な実装を簡単に紹介します。興味のある人はZulipのコードを見てください。既存のコードから学習することができることもフリーソフトウェアのよいところです。

zerver_messageがメッセージ(チャットの書き込み)を保存しているテーブルです。この中に全文検索対象のデータを入れるカラムを定義します。メッセージのテキストそのものとは別に定義することがポイントです。search_tsvectorがそのカラムです。(PGroongaを使うときの実装ではなくtextsearchを使うときの実装です。)

CREATE TABLE zerver_message (
  rendered_content text,
  -- ... ↓Column for full text search
  search_tsvector tsvector
);

この全文検索対象のデータを入れるカラムには全文検索用のインデックスを作ります。(この例ではPGroongaのインデックスではなくtextsearchのインデックスを作っています。)

CREATE INDEX zerver_message_search_tsvector
  ON zerver_message
  USING gin (search_tsvector);

このメッセージ用のテーブルにトリガーを設定します。このトリガーはメッセージが追加・更新されたときに「更新ログ」テーブル(fts_update_logテーブル)にメッセージのIDを追加します。

-- Execute append_to_fts_update_log() on change
CREATE TRIGGER
  zerver_message_update_search_tsvector_async
  BEFORE INSERT OR UPDATE OF rendered_content
    ON zerver_message
  FOR EACH ROW
    EXECUTE PROCEDURE append_to_fts_update_log();

メッセージのIDを追加する関数の実装は次のようになります

-- Insert ID to fts_update_log table
CREATE FUNCTION append_to_fts_update_log()
  RETURNS trigger
  LANGUAGE plpgsql AS $$
    BEGIN
      INSERT INTO fts_update_log (message_id)
        VALUES (NEW.id);
      RETURN NEW;
    END
$$;

「更新ログ」テーブルの定義は次の通りです。全文検索インデックスを更新するべきメッセージのIDを入れているだけです。

-- Keep ID to be updated
CREATE TABLE fts_update_log (
  id SERIAL PRIMARY KEY,
  message_id INTEGER NOT NULL
);

これで後から全文検索インデックスを更新するための情報を保存する仕組みができました。通常通りメッセージテーブルを操作するだけで実現できていることがポイントです。こうすることでアプリケーション側をシンプルにしておけます。残りの処理は、後から全文検索インデックスを更新する、です。

この処理のためにNOTIFYLISTENを使います。NOTIFYLISTENしている接続に通知する仕組みです。LISTENしている接続はNOTIFYされるまでブロックします。NOTIFYLISTENを組み合わせることで、ポーリングしなくてもイベントが発生したことに気づくことができます。

今回のケースでは「更新ログが増えた」というイベントに気づきたいです。このイベントが来たら全文検索インデックスを更新したいからです。

そのために、「更新ログ」テーブルにトリガーを追加します。「更新ログ」テーブルにレコードが追加されたらNOTIFYするトリガーです。

-- Execute do_notify_fts_update_log() on INSERT
CREATE TRIGGER fts_update_log_notify
  AFTER INSERT ON fts_update_log
  FOR EACH STATEMENT
    EXECUTE PROCEDURE
      do_notify_fts_update_log();

NOTIFYする関数の実装は次の通りです。この関数を実行すると、fts_update_logというイベントをLISTENしている接続のブロックが解除されます。

-- NOTIFY to fts_update_log channel!
CREATE FUNCTION do_notify_fts_update_log()
  RETURNS trigger
  LANGUAGE plpgsql AS $$
    BEGIN
      NOTIFY fts_update_log;
      RETURN NEW;
    END
  $$;

全文検索のインデックスを更新するSQLはPythonから発行しています。全文検索のインデックスの更新処理は必要なときだけ(更新ログがあるときだけ)実行したいです。必要がないときも更新処理を実行し続けるとムダにCPUを使ってしまうからです。

必要なときだけ処理を実行するために、LISTENでブロックします。ブロックが解除されたら(NOTIFYされたら)必ず更新ログがあるので、処理を実行します。↓には入っていませんが、処理が終わったら次のNOTIFYがあるまでまたブロックする実装になっています。こうすることで必要なときだけ処理を実行できるためムダにCPUを使わずにすみます。

cursor.execute("LISTEN ftp_update_log") # Wait
cursor.execute("SELECT id, message_id FROM fts_update_log")
ids = []
for (id, message_id) in cursor.fetchall():
  cursor.execute("UPDATE zerver_message SET search_tsvector = "
                   "to_tsvector('zulip.english_us_search', "
                               "rendered_content) "
                 "WHERE id = %s", (message_id,))
  ids.append(id)
cursor.execute("DELETE FROM fts_update_log WHERE id = ANY(%s)",
               (ids,))

このような複数プロセスでの待ち合わせを実現するためにRDBMSとは別の仕組みを使うことも多いでしょう。たとえば、RedisのPub/Subを使えるでしょう。別の仕組みを使うと運用が面倒になります。PostgreSQLにはNOTIFY/LISTENがあるので、PostgreSQLを使っていて待ち合わせを実現しなければいけないときはNOTIFY/LISTENを使うことを検討してみてください。

まとめ

ZulipとPGroongaのイベントでZulipとPGroongaの情報を紹介しました。クリアコードはZulipを使っていて、今ではなくてはならないツールになっています。ぜひみなさんもZulipを使ってみてください。

Zulipは基本的に自分たちで運用しますが、運用を任せる選択肢もあります。Zulipの開発チームがクラウドサービスでの提供を進めているのです。オープンソースコミュニティは無料で使えるそうです。興味のある人はzulipchat.comを確認してください。

PGroongaが気になる人は、11月3日開催のPostgreSQL Conference Japan 2017に来てください。日本PostgreSQLユーザ会(JPUG)が主催のPostgreSQLのカンファレンスです。ここでPGroongaの最新情報を紹介する予定です。

タグ: Groonga
2017-09-07

Redmine大阪 第17回勉強会 - 全文検索でRedmineをさらに活用! #RedmineOsaka

大阪に行くのは今年3回目な須藤です。1回目が2017年2月25日のOSS Gate大阪ワークショップ、2回目が2017年5月27日の関西Ruby会議2017、そして3回目の今回がRedmine大阪 第17回勉強会です。

関連リンク:

内容

発表内容は2017年5月13日に開催されたredmine.tokyo第12回勉強会の発表内容をアップデートしたものです。

Redmineの全文検索機能はLIKEベースで実現されていて、「どのくらい検索クエリーに適合していそうか」の概念がないため、「それっぽい検索結果を上位に並び替える」ことができません。そのため、探している情報はヒットしているけど、検索結果の中からなかなか見つけられない、という状態になりがちです。

Groongaベースの全文検索プラグインを導入すると「それっぽい検索結果を上位に並び替える」ため、探している情報をすぐに見つけられるようになります。

これだけだと「Redmineの不便なところを解消した」というレベルなのですが、このプラグインで目指しているものはもっと先にあります。ユーザーの手間をできるだけ減らしつつ、必要なときに必要な情報をユーザーに提供することを目指しています。

現在開発を進めているのが類似issue検索です。閲覧中のissueと似ているissueを自動で検索して表示する機能です。

有効に活用されているRedmineには過去の問題対応の詳細が記録されています。新しく問題が発生したとき、以前は類似の問題にどのように対応したかがわかると、新しい問題にも素早く適切に対応できます。

現在のRedmineの機能では、過去に類似の問題があったかどうかは人が明示的に探さなくてはいけません。人が探す場合、なにかキーワードを知らなければいけません。既存メンバーは「そういえば似たような問題があったな…」という記憶からキーワードを手繰り寄せられるかもしれませんが、新しく入ってきたメンバーにはそれはできません。

大量のデータから検索するのは機械が得意な処理です。データを活用して機械が人をサポートする方法の1つが類似issue検索です。現在の実装は、単に字面だけで類似度を計算していますが、今後は、字面だけでなく意味で類似度を計算する、テキストデータだけでなくメタデータも使って類似度を計算するなど、有用なデータを活用して精度をあげていく予定です。

類似issue検索はデータを活用して機械が人をサポートする1つのアプローチに過ぎません。類似issue検索以外にもRedmine内のデータを活用して人がより有意義なことに時間を使えるようにしていきたいです。

そこを目指すためにはデータが必要不可欠です。クリアコード内のデータだけでは足りません。Redmine内のデータを活用してもっと自分たちの活動を有意義にしていきたい方はぜひ開発にご協力ください。開発に協力する方法はいろいろあります。たとえば、「自分たちのRedmineのデータを活用して自分たちの活動を有意義にするサポートをして欲しい」という仕事をクリアコードに発注する方法があります。この方法では、発注者には自分たちの活動をより有意義にできるというメリットがあり、クリアコードにはお金を得られる・現実のデータを使って現実の人たちの活動を支援するノウハウを得られるというメリットがあります。

私たちは成果(この場合は改良したプラグイン)をだれでも自由に利用できるようにします。「自分たちがお金を払って改良した分を他の会社がお金を払わずに使えるようになるのは損だ」と考える人も多いかと思いますが、実際は損になることはほとんどありません。

たとえば、メンテナンスコストが下がるので、運用後の費用面で得になります。一社向けに提供するソフトウェアのメンテナンスコストは当然一社で持つことになります。一方、大勢が利用するソフトウェアのメンテナンスコストは大勢で持ちます。そのため、だれでも自由に使えるようにした方がメンテナンスコストが下がるのです。

他社が使える状態になったとしても、すぐに追いつかれるわけではありません。他社はノウハウがない状態からのスタートになるからです。しかも、自分たちのノウハウを公開しても損にはなりません。情報は発信しているところに集まります。ノウハウを公開することで新しいノウハウを得やすくなります。他社が自社のノウハウを得られても、自社にはもっとノウハウが集まります。他社を抑えることを頑張るよりも、自社がより伸びることを頑張る方が結果として得をします。

Redmine内のデータを活用してもっと自分たちの活動を有意義にしていきたい方はぜひお問い合わせください。一緒に実現しましょう。

まとめ

Redmine大阪 第17回勉強会でRedmine用の全文検索プラグインを紹介しました。単にいい感じの全文検索機能を提供するだけでなく、検索を軸にRedmineを使っている人たちの活動をいい感じにすることを目指しています。もっとRedmineを活用したい方はお問い合わせください。検索まわりはもちろん、Redmine本体の修正・改良や既存のRedmineプラグインの修正・改良もできますし、新規プラグインを開発して問題を解決することもできます。もちろん、変更部分はRedmine本体やプラグインの開発元にフィードバックします。

タグ: Groonga
2017-08-27

MySQL・PostgreSQL上で動かす全文検索エンジン「Groonga」セミナー - Mroonga・PGroongaを使った全文検索システムの実装方法 #groonga #mysql #mariadb #postgresql

cairo色付きフォントサポートが入ったので、今回のスライドではNoto Color Emojiを使ってRabbitで色付きの絵文字を表示した須藤です。

2017年8月1日にMySQL・PostgreSQL上で動かす全文検索エンジン「Groonga」セミナーを開催しました。今回は業務でGroonga(Mroonga・PGroonga)を使いたい人向けのイベントだったので平日の午後に開催しました。

関連リンク:

内容

これまでのMroonga・PGroongaの紹介資料では、速さや機能を紹介するまとめ方が多かったのですが、今回の資料は「イマドキの全文検索システムを作るにはこんなSQLを使えばよい」というまとめ方にしました。逆引きレシピのようなまとめ方です。

話の流れは次のようになっています。全文検索システムを作る機会がある人は参考になるはずです。

  • イマドキの全文検索システムとは?
  • ミドルウェアの選び方は?判断基準は?
    • 全文検索サーバーを使う?
    • RDBMSだけでがんばる?
    • RDBMSに全文検索エンジンを組み込む?
  • イマドキの全文検索システムに必要な以下の機能をMroonga・PGroongaで実装するには?
    • 全文検索機能
    • キーワードハイライト機能
    • 周辺テキスト表示機能
    • 入力補完機能(今回はPGroongaのみ)
    • 同義語展開機能(今回はPGroongaのみ)
    • 関連文書の表示機能
  • 構造化された文書を検索対象にするには?
    • 構造化された文書の例:オフィス文書(Word・Excel・PowerPoint・LibreOfficeなどで作成した文書)
    • 構造化された文書の例:HTML(ヘッダー・フッター・サイドバーのテキストを取り除くなど、単にbody.innertTextの値を取得するだけではノイズが増えるので、いろいろケアが必要)
    • 構造化された文書の例:PDF
    • HTTPでテキスト抽出・スクリーンショット作成できるChupaTextの紹介
    • Dockerで使う:chupa-text-docker
    • Vagrantで使う:chupa-text-vagrant

まとめ

Mroonga・PGroongaでイマドキの全文検索システムを作る方法を紹介するセミナーを開催しました。クリアコードは全文検索システムの受託開発・設計支援・開発支援・障害調査支援など全文検索関係のもろもろをサポートするサービスを提供しています。とりあえず話を聞いて欲しいというレベルからでも結構ですので困っていることがあればお問い合わせください。

タグ: Groonga
2017-08-02

2008|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|
タグ: