BloGroonga

2017-01-18

Groonga 6.1.4リリース

Groonga 6.1.4をリリースしました。6.1.3のバグフィックスリリースです。6.1.2、6.1.3をお使いの方はアップグレードをお願いします。

それぞれの環境毎のインストール方法: インストール

変更内容

Groonga 6.1.2で導入したAND検索時の高速化に問題があったため修正しました。マッチするべきレコードがマッチしないことがあります。インデックスは壊れていないため、インデックスの再構築は必要ありません。アップグレードするだけで直ります。

もし、すぐにアップグレードできない場合は以下の環境変数を設定してください。高速化が無効になり、問題を回避できます。

GRN_II_CURSOR_SET_MIN_ENABLE=no

また、Groonga 6.1.3で一旦無効にしたインデックス構築時間の改善処理を再度有効にしました。なお、この改善処理は通常の使い方ではほぼ影響はありません。自然言語テキストに対する高速化はGroonga初期の頃から実装済みです。この改善処理では、Mroongaのマルチカラムインデックスで使う場合のように非自然言語テキストのインデックス構築時のみ影響があります。Mroongaでマルチカラムインデックスを使っている方はぜひ試してみてください。

他にも近傍検索まわりをいくつか改良しています。

さいごに

繰り返しになりますが、6.1.2、6.1.3をお使いの方はアップグレードをお願いします。

6.1.3からの詳細な変更点は6.1.4リリースを確認してください。

2017-01-11

Groonga Meatup 2017開催のおしらせ

Groongaは毎月肉の日(29日)に新しいバージョンをリリースしています。それにちなんで、通例として年に1度の「いい肉の日(11月29日)」に大きめのイベントを開催してきました。2016年は11月29日の開催を見送って、2017年2月9日の「肉の日」に開催します。

Groonga/Mroonga/PGroonga/Rroonga/…を使っている・興味のある方はぜひご参加ください!イベントページで参加登録できます。

会場はクラウドワークスさんが提供してくれました。ありがとうございます!クラウドワークスさんは、社員情報と日報の全文検索エンジンとしてGroonga(Rroonga)を利用してくれています。

イベント終了後、懇親会を予定しています。詳細は後日あらためて告知します。

参加者だけでなく発表者、イベントを手伝ってくれる方を募集しています。我こそは!という方はぜひご連絡ください。

発表者の募集についての詳細は発表者公募要項を参照してください。締め切りは設定していませんが、基本的に先着順で採択します。募集人数は「イベントの時間が許す限り」です。4〜5人程度の採択となる見込みです。

イベント協力者の募集についての詳細はGroonga Meatup 2017:イベント手伝い応募場所を参照してください。次のことについて手伝ってくれる人を募集します。

  • イベントレポート
  • Twitterでのイベント実況およびTogetterへのまとめ
  • 当日の受付および会場係
  • 懇親会スタッフ
  • 動画配信

イベント協力者の募集は2017年1月22日(日)を締め切りにしています。1月中に一度集まってより具体的な内容などを共有する予定です。

それでは、たくさんのご参加お待ちしています!

2017-01-06

Groonga 6.1.3リリース

Groonga 6.1.3をリリースしました。6.1.2のバグフィックスリリースです。6.1.2をお使いの方はアップグレードをお願いします。

それぞれの環境毎のインストール方法: インストール

変更内容

Groonga 6.1.2で入った、転置インデックスの更新が遅くなるケースの改善を元に戻しました。キーがマルチバイト文字を含む場合にエラーになっていたためです。この改善については、エラーにならないように対応し、改めて次回以降のリリースに含める予定です。

さいごに

繰り返しになりますが、6.1.2をお使いの方はアップグレードをお願いします。

6.1.2からの詳細な変更点は6.1.3リリースを確認してください。

2016-12-31

Groonga 6.1.2リリース

今年も残りあとわずか、Groonga 6.1.2をリリースしました!

それぞれの環境毎のインストール方法: インストール

変更内容

主な変更点は以下の通りです。

コマンドバージョン3の場合に、load結果のレスポンスに追加の情報を返すようになりました。

  • ロードされたレコード数を返す機能の追加
  • --output_ids を指定するとロードできたIDを返す機能の追加

ロードされたレコード数を返す機能の追加

--command_version 3 が指定されている時に、load結果のレスポンスに {"n_loaded_records": N} を含めるようになりました。

正常にloadできたかの件数をこれで確認することができるようになっています。

{
  "header": {
    "return_code": 0,
    "start_time": 0.0,
    "elapsed_time": 0.0
  },
  "body": {
    "n_loaded_records": 2
  }
}

--output_ids を指定するとロードできたIDを返す機能の追加

--command_version 3 が指定されている時に、--output_ids yes パラメータが指定されていれば、ロードできたIDを返すようになりました。また、ロードに失敗したデータがどれかもわかるようになりました。

ロードできたIDは以下のようにloaded_idsとして出力されます。

{
  "header": {
    "return_code": 0,
    "start_time": 0.0,
    "elapsed_time": 0.0
  },
  "body": {
    "n_loaded_records": 2,
    "loaded_ids": [
      1,
      0,
      2
    ]
  }
}

上記のレスポンスに、IDが0のものが含まれていますが、これはロードに失敗したことを意味します。

注意点として、大量のデータをloadする場合に --output_ids yes を指定するのはあまりおすすめしません。IDの配列を作ってレスポンスに含める処理が必要になるためです。またそれにともないレスポンスのサイズも肥大化します。

どうしてもIDが必要ならloadするデータを分割して実行したほうがよいでしょう。

Groonga Advent Calendar 2016を開催しました

今年もAdvent Calendarの季節ということで、QiitaでGroonga Advent Calendar 2016を開催しました。

Groonga開発チームによるGroongaのあるきかたを皮切りに、いろんな切り口の記事が集まりました。参加してくれたみなさん、ありがとうございました!

Groonga Meatup 2017を開催します

来年の2月9日、肉の日にGroongaのイベントを開催します。 Groonga Meatup 2017会場提供のお願いをしていましたが、株式会社クラウドワークスさんに快く提供してもらえることになりました。

クラウドワークスさんは、Groongaのリリース自慢会を開催したときに会場をお借りした縁のある会社さんです。

当日は18:30開場、19:00から21:00にかけての開催を予定しています。 発表者の募集もそろそろはじめますので、みなさん予定を空けておいてください!

参加申し込み方法など、イベントの詳細情報は追って告知します。

さいごに

6.1.1からの詳細な変更点は6.1.2リリース 2016-12-31を確認してください。

それでは、Groongaでガンガン検索してください!良いお年を!

2016-12-05

Groonga Meatup 2017会場提供のお願い

Groongaは毎月肉の日(29日)に新しいバージョンをリリースしています。それにちなんで、通例として年に1度の「いい肉の日(11月29日)」にやや大きめのイベントを開催してきました。今年2016年は11月29日の開催を見送って、年が明けて2017年2月9日の「肉の日」に開催することを予定しています。なのでイベント名も「Groonga Meatup 2017」になります。

2017年2月9日(木)は平日なので、Groonga Meatup 2017は皆さんのお仕事帰りの時間帯で18:30開場、19:00から21:00にかけての開催となります。

そこでようやく本題なのですが、このGroonga Meatup 2017のために会場をご提供いただける企業を探しています。以下の条件で会場をお貸しいただける企業の方は是非、イベント管理用のGitHubのissueへのコメント、GroongaのTwitterアカウント宛のメンションやDM、Groonga関連のMLへの投稿、またはgroonga@groonga.org宛のメールにてご連絡いただけませんでしょうか?

  • 2017年2月9日(木) 18:00-21:30に使える
    • 準備と撤収作業のために、前後30分ずつのバッファを見込んでいます。
    • 必須ではないのですが、もし飲食可の会場で、遅くまで使わせていただいて問題が無ければ、終了後に1時間ほどの懇親会を開催させていただけると有り難いです。(その場合、撤収は1時間後ろにずれて22:30頃を見込んでいます。)
  • 最大で80人くらい入れる
    • 2014年の平日開催では参加者数の実績は156人でしたが、今回は告知のタイミングが遅くなるため、その半数程度になると見込んでいます。
  • 都心にある
    • 都心の方がアクセスがよさそうで、そうすると参加者が参加しやすそうだからです。都心とは、たとえば山手線沿いのことです。
  • Groonga/Mroonga/PGroonga/Rroonga/…を使っている
    • ユーザーの方に協力して欲しいです! また、できれば発表にもご協力いただけると幸いです!

まずは会場が決まらないと発表者の募集もままなりませんので、イベント開催へのご協力をなにとぞよろしくお願いいたします!

2016-12-02

Groonga Advent Calendar 2016 2日目:新リリース自慢会の紹介

去る2016年11月29日、Groonga新リリース自慢会を開催しました。Groonga Advent Calendar 2016の2日目は、新リリース自慢会のことをご紹介します。

イベントの中で言及された具体的な個別の改善点や技術的なトピックについては別途このAdvent Calendarの記事としてご紹介することとして、この記事では「新リリース自慢会」という形でイベントを開く事そのものについて述べます。プロダクトを持っていてコミュニティ向けのイベントの開催を検討中の方は参考にしてみて下さい。

年1回では期間が空きすぎなので、月1で

Groongaコミュニティでは例年11月29日の「いい肉の日」や2月9日の「肉の日」などの節目でユーザーと開発者が一堂に会するイベントを開催しています。

しかし、1年に1回のペースだとステータスアップデートだけでも相当の情報量になってしまい、限られた発表時間に収めようとするとあっさりした紹介の仕方にならざるを得ません。また、ユーザの方からのフィードバックを得る機会が少なくなってしまうという点も問題です。

そこで、毎月の定期的なリリースに合わせてもっと小規模なイベントを開催して、その月のリリースでの改善点の紹介を軸としてより気軽に情報交換ができる機会を設けたいという趣旨で始めたのが、新リリース自慢会というイベントです。4月のGroonga 6.0.2リリースに併せての開催以降スキップが続いていましたが、この度、Grooga 6.1.1のリリースに併せて久しぶりに開催してみました。

開催場所と時間はどう決めるか

イベントを開催する時に悩むのが「いつ、どこで」という点です。何も基準がないと漠然とし過ぎているため、どう決めていいかもわからなくなってしまいます。何か基準になる事があれば、それに合わせて他の事を決めていくと迷わなくて良いです。

Groongaの場合は毎月29日にリリースをする方針なので、この日付を基準として他の事を決めていきました。11月29日火曜日は平日なので、仕事帰りに立ち寄って頂きやすそうな時間帯として夜19時30以降で開催する事にしました。

会場については、リリース自慢会は小規模にするという事を最初から決めていたため、手近な所でクリアコードの事務所の会議スペースを使用する事にしました。会議スペースに設置できる椅子の数は頑張っても6人程度までだったため、そこから募集人数も最大6人と決まりました。

告知と募集はどこで行うか

Groongaコミュニティの場合、イベント情報の公開や参加者の募集はDoorkeeperで行っています。Doorkeeperではコミュニティ参加者向けの告知を流すことができるので、Groongaコミュニティではこれをイベントの開催予定の連絡に使用しています。それ以外には、TwitterやFacebookページの投稿、projectサイトのブログの記事の記事、MLへの投稿で開催の告知と参加者募集を行いました。

また、この種の技術イベントは直前になってキャンセルが出る事がままあります。そこで、キャンセル待ちの人が繰り上がれるように、開催日が近くなったらDoorkeeperの参加登録者向けメール送信機能を使って、都合が悪くなった方向けにキャンセル操作を依頼する内容のリマインダーメールを参加者宛に送るようにしています。

イベント直前

当日は説明に詰まらないよう、念のため事前に発表者同士でリハーサルを行い、紹介予定のトピックについては説明ができるだけの材料を揃えておきました。 終了についてもこの時打ち合わせておきました。小規模なイベントの場合、メニューを消化したら予定時刻よりも前の時点でも終わりとするのか、予定時間まで引き延ばすのかという点で悩む事があります。今回は、方針としてはメニューを一通り消化した上で、質問などの会話が尽きた時点で閉会するという事にしました。

イベント本番

開会後の流れは以下のような物でした。

  1. 参加者同士の間での簡単な自己紹介。自分とGroongaの関係性について全員が一言程度コメントする。(話しやすい雰囲気を作るため)
  2. Groonga 6.1.1とMroonga 6.11での改善点の紹介。
  3. 参加者同士での質問のやりとり。

開催時間が遅めであるということと、カジュアルに話せる雰囲気を作りたかった事から、会場は飲食可として(食べたい人・飲みたい人が)各自でお菓子程度の物を持ち込んでもらい、好きなようにつまみながら話を聞いてもらう(話してもらう)ようにしました。

この日は全4名の参加でしたが、質問をきっかけとして以下のような話題で情報提供や議論が交わされていました。

  • Groongaをマスターデータの保存先に使う事について
  • 地図情報を取り扱う分野でのGroongaの利用について
  • 機械翻訳の分野での作業にGroongaを利用する事について
  • Groongaユーザ同士での相互サポートの促進について

これらの個々の話題については、このAdvent Calendar上で日を改めて記事にしていく予定です。

様々な話題で盛り上がったため、終了は予定時刻を大幅に過ぎてしまいました。自社スペースを使う場合はこのように融通を利かせやすいのがメリットと言えるでしょう。ただし、あまり遅くなりすぎると参加者に対して却って迷惑になる事も考えられます。あまり予定を越えて長引かせるよりは、次の機会を設けて場を改めるのがよいでしょう。

次回以降の開催について

12月29日は年末で参加者が集まらないことが予想されるため、新リリース自慢会の開催は見送る予定です。また、2017年2月9日には年1回ペースの大きめのイベントを企画しているため、直前の1月29日についても開催は見送る予定です。ということで、次回は2月28日か3月29日になる見込みです。正式に開催を決定したらDoorkeeperのGroongaコミュニティやTwitter等で告知しますので、気になる方は事前にフォローしておいていただけましたら幸いです。

以上、Groonga Advent Calendar 2016の2日目でした。

2016-11-30

PostgreSQL用高速日本語全文検索モジュールPGroonga(ぴーじーるんが) 1.1.9リリース

PostgreSQLで高速日本語全文検索をできるようにするPGroongaの1.1.9をリリースしました!

新規ユーザーの方は、PGroonga 1.0.0のリリースアナウンスのPGroongaについても参照してください。

ベンチマーク

公式サイトにWikipediaのデータを使ったベンチマークを追加しました。

比較対象は以下の3つのモジュールです。

  • PostgreSQL組み込みのtextsearch
  • contribにあるpg_trgm
  • サードパーティーの拡張モジュールpg_bigm

textsearchとpg_trgmは日本語をサポートしていないので英語版のWikipediaのデータを使っています。

pg_bigmは日本語をサポートしているで日本語版のWikipediaのデータを使っています。

PGroongaとtextsearchとpg_trgm

PGroongaとtextsearchとpg_trgmのベンチマーク結果の概要を説明します。より詳細な内容はPGroonga対textsearch対pg_trgmを参照してください。

まず検索時間です。

次のようにpg_trgmがPGroongaとtextsearchと比べて圧倒的に遅かったです。(棒の長さは検索時間(ms)を表しているので短い方が高速です。)

PGroongaとtextsearchとpg_trgmの検索時間

pg_trgmを抜くと次のようになります。PGroongaとtextsearchがほぼ同じくらいの速さということがわかります。なお、「Groonga」というのはpgroonga.command関数を使ってGroongaを直接使って検索したケースです。PGroonga・textsearchと比べて10倍以上高速です。

PGroongaとGroongaとtextsearchの検索時間

次にインデックス作成時間です。

次のようにPGroongaが一番高速です。textsearchより2倍ほど速く、pg_trgmより30%ほど速いです。

PGroongaとtextsearchとpg_trgmのインデックス作成時間

PGroongaとpg_bigm

PGroongaとpg_bigmのベンチマーク結果の概要を説明します。より詳細な内容はPGroonga対pg_bigmを参照してください。

まず検索時間です。

次のように検索語が3文字以上のときはpg_bigmはPGroongaと比べて圧倒的に遅かったです。(棒の長さは検索時間(ms)を表しているので短い方が高速です。)

PGroongaとpg_bigmの検索時間

次にインデックス作成時間です。

次のようにPGroongaがpg_bigmより75%ほど速いです。

PGroongaとpg_bigmのインデックス作成時間

変更点

1.1.3からの変更点は次の通りです。UPDATE/DELETEをすると検索漏れが発生する可能性がある問題を修正しているためアップグレードをオススメします。ストリーミングレプリケーション対応やZstandardによる圧縮のサポートなど多くの改良もあるため、その観点でもアップグレードをオススメします。それぞれの項目の詳細はリンク先を確認してください。

  • [実験的] WALをサポートしました。クラッシュセーフではありませんが、レプリケーションができるようになりました。PostgreSQL 9.6以降とMessagePackが必要です。
  • [Windows] バンドルしているGroongaのバージョンを6.1.1にしました。
  • [Windows] PostgreSQL 9.5.5用のパッケージと9.6.1用のパッケージを両方提供するようにしました。
  • インデックス対象のテーブルに対してUPDATEあるいはDELETEをした後、検索できないレコードがでることがある問題を修正しました。(yongxianggao-chanjetさんが報告)
  • pgroonga.score関数のメモリーリークを修正しました。(高橋さんが報告)
  • デフォルトテーブルスペース以外のテーブルスペースにPGroongaのインデックスを作成するとVACUUM時に削除される問題を修正しました。(yongxianggao-chanjetさんが報告)
  • テーブルスペースをサポートしました。
  • サイズの大きなレコードがある場合はインデックスオンリースキャンを無効にするようにしました。
  • [Ubuntu] Wily Werewolf(15.10)のサポートをやめました。
  • [Ubuntu] Yakkety Yak(16.10)のサポートを始めました。
  • Zstandardを使ったテキストデータの圧縮をサポートしました。
  • zlibを使ったテキストデータの圧縮をサポートしました。
  • 起動時にログにPGroongaのバージョンを出力するようにしました。
  • pgroonga_tuple_is_alive Groonga関数を追加しました。groonga.command関数と一緒に使うとPostgreSQLレベルで無効なレコードを除去できます。
  • CREATE INDEX時のメモリー使用量を減らしました。
  • クラッシュ時にバックトレースをログに残すようにしました。(Windowsでは動きません。)
  • ログにPIDを出力するようにしました。
  • 定数を引数として以下の関数を実行したときに最適化されるようにしました。
  • pgroonga.escape関数を追加しました。スクリプト構文の値をエスケープする関数です。
  • pgroonga.query_escape関数を追加しました。クエリー構文の値をエスケープする関数です。
  • pgroonga.command_escape_escape関数を追加しました。Groongaコマンドの引数の値をエスケープする関数です。
  • pgroonga.table_name関数の戻り値の型をcstringからtextに変更しました。
  • pgroonga.command関数でコマンドの引数を配列で指定できるようにしました。引数の値を自動的にエスケープするためセキュリティー向上につながります。そのためこの使い方を推奨します。
  • クエリーログを出力できるようにしました。pgroonga.query_log_pathパラメーターで出力の場所、出力するかどうかを制御できます。

アップグレード方法

1.1.3以降のすべてのバージョンと互換性があります。アップグレードの「互換性がある場合」用の手順でアップグレードしてください。

おしらせ

PGConf.ASIA 2016 DAY 2(2016年12月3日(土))の14:00からPGroongaのセッションがあります。PGroongaと他のモジュールの比較だけでなく、PostgreSQL 9.6から追加されたgeneric WAL APIを用いたレプリケーションの実現方法なども解説する予定です。セッションで使うスライドは以下で公開しています。PGroongaに興味のある方はぜひお越しください。

まとめ

PGroongaの新しいリリースを紹介しました。レプリケーションにも対応してどんどん使いやすくなっています。

PostgreSQLで高速に日本語全文検索をしたいという方はPGroongaを使ってガンガン検索してください!