BloGroonga

2017-07-29

Groonga 7.0.5リリース

今日は肉の日ですね!

Groonga 7.0.5をリリースしました!

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

まず最初にイベントのお知らせから。

MySQL・PostgreSQL上で動かす全文検索エンジン「Groonga」セミナー開催

来月早々に「MySQL・PostgreSQL上で動かす全文検索エンジン「Groonga」セミナー」が開催されます。

オープンソース全文検索エンジン「Groonga」を組み合わせた全文検索システム開発について、その概要から導入方法までを学べる無料セミナーです。

SQLを使って全文検索システムを構築したい、今のウェブサイトにサジェスト機能を追加したい、コンテンツ更新後すぐ検索結果を反映したい、などの要望があれば参加をオススメします。

日程は以下のとおりです。

まだ若干名定員に空きがありますよ!

それでは、今月のリリースについて紹介します。

変更内容

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

  • dump コマンドに --sort_hash_table オプションを追加
  • math_abs 関数のサポート
  • Ubuntu 16.10 (Yakkety Yak)のサポート終了

dumpコマンドに–sort_hash_tableオプションを追加

これまで、hashテーブルをダンプしたときには、結果はソートされていませんでした。しかし、dump結果を比較して差分をチェックしたいという要望があったので、今回のリリースではソートするためのオプションとして --sort_hash_table をサポートしました。

ソートしたい場合には、 --sort_hash_table yes をdumpコマンドのオプションに指定するようにしてください。オプションを指定しない場合には従来どおりソートされません。

以下はShopsテーブルをダンプする例です。

groonga testdb/db "dump Shops --sort_hash_table yes" > sorted.dump

math_abs関数のサポート

今回のリリースでは、絶対値でソートしたいという要望に応えて、 math_abs 関数をサポートしました。

プラグインとして追加しているので、事前に登録が必要です。

plugin_register functions/math

都市のデータを特定の都市からの時差が少ない順にソートして表示したいとします。

それに使うサンプルのスキーマとデータは以下の通りとします。

table_create City TABLE_HASH_KEY ShortText
column_create City utc COLUMN_SCALAR Int32

load --table City
[
{"_key": "Tokyo",    "utc": 9},
{"_key": "New York", "utc": -4},
{"_key": "Paris",    "utc": 2}
]

このデータから、シンガポール(UTC+8)との時差が少ない都市を順に表示するには次のようなクエリーを実行します。絶対値で比較するのに math_abs()を使います。

すると、以下の様なクエリーで仕事場から近いお店をソートして得ることができます。

select City \
  --filter true \
  --output_columns '_key, utc, _score' \
  --scorer '_score = math_abs(8 - utc)' \
  --sort_keys _score

math_abs()がない場合に自乗するという回避策をとらなくてもよくなります。

Ubuntu 16.10(Yakkety Yak)のサポート終了

今回のリリースから、Ubuntu 16.10(Yakkety Yak)向けパッケージの提供を終了しました。7/20にUbuntu 16.10がEOLとなったためです。

さいごに

7.0.4からの詳細な変更点は7.0.5リリース 2017-07-29を確認してください。

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

2017-07-03

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

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

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

ハイライト

1.2.1以降のハイライトは次の通りです。

  • 演算子名の整理

  • クエリー展開機能をサポート

  • 入力補完機能をサポート

  • 類似文書検索をサポート

  • jsonbの全文検索の使い勝手を向上

それぞれ説明します。

演算子名の整理

PGroongaはクエリー言語を用いた全文検索用の演算子としてtextsearchと同じ@@を使っていました。これは@@だと既存のPostgreSQLユーザーはなじみやすいのではないかという期待からです。しかし、textsearchとPGroongaの全文検索の挙動が違うためにかえって使いにくいものになりました。

そこで、@@の代わりに&?を導入しました。psqlで直接SQLを実行するときはこれで問題ないのですが、各種言語のクライアントライブラリーから使うときには使いにくかったです。これは、?はクライアントライブラリーがSQLを組み立てるときに使うプレースホルダー文字と同じためです。

そのため、@@でも&?でもなく&@~を使うことにしました。この演算子名にした理由は次の通りです。

  • &:PGroongaの演算子全体で&をプレフィックスに使うようにしたため。

  • @:textsearchの@@演算子と同様に全文検索機能を提供することをわかりやすくするため。

  • ~:RubyやPerlでは~で正規表現によるパターンマッチを表現しているのでそれにならったため。クエリー言語は正規表現ではないが、パターンのようなものと捉えることもできるため、~をつけることで「指定したキーワードでの全文検索(演算子名は&@)」ではなく「クエリー言語での全文検索」を表現した。

_v2が付かない既存の演算子クラスでも新しい演算子名を使えるので、徐々に新しい演算子名に移行できます。

クエリー展開機能をサポート

同義語検索(*)の実現にも使えるクエリー展開機能をサポートしました。

(*) 表記が異なっても同じ意味ならヒットする検索。たとえば、「PostgreSQL」でも「Postgres」でも「PG」でも「PostgreSQL」がヒットする。

クエリー展開ルール(同義語)は通常のテーブルで管理します。そのためいつも通りSELECTINSERTUPDATEDELETEを使えます。textsearchでは同義語辞書という専用の仕組みを用意しているため、特別な管理方法になります。

クエリー展開機能の詳細はpgroonga.query_expand関数を参照してください。

入力補完機能をサポート

最近の全文検索システムは単に全文検索できるだけでは機能不足で、検索ボックスでの入力補完は「あって当たり前」の機能になっています。そんな入力補完機能を実現できるようになりました。

入力補完は前方一致検索と全文検索の組み合わせで実現します。日本語での入力補完のためにローマ字での入力補完にも対応しています。たとえば、「gyu」(「ギ」のローマ字表記)で「牛乳」を補完できます。

補完候補は通常のテーブルで管理するので、管理しやすいです。

詳細はオートコンプリート機能の実装方法を参照してください。

類似文書検索をサポート

現在閲覧中の文書と関連する文書をユーザーに提示することでWebサイトの回遊率を高めるために有用な検索が類似文書検索です。_v2の演算子クラスを使うと類似文書検索できるようになりました。

類似文書検索の使い方は&~?演算子を参照してください。日本語の文書を類似文書検索する場合はTokenMecabを使った方が精度がよくなります。これについてはドキュメントの最後に書いているのでドキュメントは最後まで確認してください。

jsonbの全文検索の使い勝手を向上

これまでもjsonb内のテキスト全部を全文検索できましたが、もっと使い勝手がよくなりました。テキストカラムの内容を全文検索するのと同じように全文検索できます。

-- textカラムの場合
SELECT * FROM memos WHERE content &@~ 'キーワード1 OR キーワード2';
-- jsonbカラムの場合
SELECT * FROM logs WHERE record &@~ 'キーワード1 OR キーワード2';

詳細はjsonb型用の&@~演算子を参照してください。

アップグレード方法

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

おしらせ

セミナー

8月1日(火)14:00-16:00にMySQL・PostgreSQL上で動かす全文検索エンジン「Groonga」セミナーを開催します。PGroongaの導入を検討している方はこの機会を活用してください。

サポートサービス

PGroongaのサポートサービスを提供しています。インデックスや検索の設計方法に関するコンサルティングやトラブル時の調査、パフォーマンス改善・新機能追加などの技術支援など、PGroongaに関わるサポートが必要な場合はご相談ください。

まとめ

PGroongaの新しいリリースを紹介しました。インデックス破損の自動復旧が追加されたりしてどんどん使いやすくなっています。

ここで紹介したもの以外の変更点はリリースノートを参照してください。

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

2017-06-29

Groonga 7.0.4リリース

今日は肉の日ですね!

Groonga 7.0.4をリリースしました!

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

変更内容

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

  • Debian 9 (stretch)のサポート
  • grndbにログオプション追加
  • クエリのパフォーマンスの改善

Debian 9 (stretch)のサポート

今回のリリースでは、今月リリースされたDebian 9 (stretch)のサポートを追加しました。

インストール手順の詳細についてはインストール方法(stretch)を参照してください。

grndbにログオプション追加

grndbはデータベースのメンテナンス用のツールです。 grndb check でデータベースの状態をチェックし、問題があれば報告します。また grndb recover で可能なら修復することもできます。

今回のリリースでは、 grndb の実行ログを保存するためのオプション --log-level--log-path を追加しました。

クエリのパフォーマンスの改善

今回のリリースでは、いくつかのパターンのクエリのパフォーマンスを改善しました。

  • "固定長カラム(Int8など) 演算子 定数"というクエリの高速化
  • in_recordsの高速化("カラム 演算子 値 && カラム 演算子 値 && …"というクエリの高速化)

前者はカラムアクセスの処理の一部を省略することで高速化しました。演算子は ==, !=, <, >, <=>= に対応しています。

後者はオブジェクトを大量に作らないようにすることで高速化しました。mrubyで実装していた箇所はオーバーヘッドが大きかったためCで実装するようにしています。

さいごに

7.0.3からの詳細な変更点は7.0.4リリース 2017-06-29を確認してください。

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

2017-06-27

ConoHa支援プログラム終了に伴うサーバー移行について

気づいた人は少ないかもしれませんが、最近GroongaやMroongaのソースコードやパッケージを提供するのに使っている https://packages.groonga.org をConoHaから別のサービスへと移行しました。

ConoHa支援プログラムとは

「オープンソースソフトウェアの開発コミュニティやユーザー会、スタートアップ企業など、IT業界を盛り上げるみなさまを応援する支援制度」です。

Groongaプロジェクトは2014年9月頃に採用され、それ以来ずっとサーバー面をConoHaに支援してもらってきました。 当時のリリースブログエントリにもその紹介があります。

過去にはイベントの会場を提供してもらったり、イベントレポートを公開してもらったこともありました。ありがとうございました!

当時のコミュニティーの具体的な活動内容や今後の目標についてのインタビュー記事もブログ記事として読むことができます。

さいごに

コミュニティーの活動をサーバー面で支援してもらって、とても助かりました。 これまで支援ありがとうございました!

2017-05-29

Groonga 7.0.3リリース

今日は肉の日ですね!

Groonga 7.0.3をリリースしました!

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

変更内容

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

  • [select] インデックス名を指定した全文検索 のドキュメントを追加しました
  • [実験的] Apache Arrow形式のデータのloadとdumpをサポートしました

[select] インデックス名を指定した全文検索 のドキュメントを追加しました

今回のリリースでは、selectコマンドでインデックス名を指定した全文検索を行うにはどうすればよいかという内容のドキュメントを追加しました。 インデックス名を指定した全文検索というセクションにおいて、チュートリアル形式で指定の仕方を説明しています。

--match_columns にデータカラムが指定されている場合、Groongaは自動的に関連するインデックスカラムを探します。しかし、どのインデックスカラムが実際に選択されるかは仕様として定義されていません。つまり、もし複数のインデックスカラムが1つのデータカラムに対して作成された場合、事前にどのインデックスカラムが選択されるかはわからないということです。(たいていは最後に作成されたインデックスカラムが選択されるためそれっぽい動きになります。)

明示的に使うインデックスを指定したい場合は、データカラムではなくインデックス名を指定するのがおすすめです。

[実験的] Apache Arrow形式のデータのloadとdumpをサポートしました

今回のリリースではApache Arrow形式のデータのloadとdumpをサポートするためのAPIを追加しました。

まだAPIを追加しただけなので、簡単に使える形では提供できていませんが、将来的にはそのあたりもいい感じに提供できるようになるはずです。

Apache Arrow形式をサポートすると、例えばJSON形式のパースにかかっていたコストを抑えたりできるので、loadやdumpをより高速に行えるようになるはずです。また、データ分析界隈で使われているデータをそのままGroongaへと取り込んで処理したりすることができるようになります。 Groongaの可能性が広がりますね!

さいごに

7.0.2からの詳細な変更点は7.0.3リリース 2017-05-29を確認してください。

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

2017-04-29

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

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

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

ハイライト

今回のリリースのハイライトは次の通りです。

  • レプリケーション機能の改良

  • トークンフィルター・プラグインのサポート

  • PGroongaのインデックスの自動復旧機能の追加

  • 2.0.0へのスムーズな移行の準備

それぞれ説明します。

レプリケーション機能の改良

今回のリリースではレプリケーションまわりの機能を改良しています。

NULLを含むカラムでもレプリケーションできるようになりました。

データ同期のタイミングも増えました。これまではSELECT時のみ同期していましたが、INSERT時にも同期するようになりました。

Ubuntu 17.04とCentOS 6のパッケージでもレプリケーションできるようになったので、より使いやすくなっています。

レプリケーションの詳細は公式ドキュメント「レプリケーション」を参照してください。

トークンフィルター・プラグインのサポート

CREATE INDEX USING pgroongaでインデックスをつくるときにトークンフィルターとプラグインを指定できるようになりました。それぞれtoken_filterspluginsで指定します。

これによりチューニングの幅が広がりました。たとえば、英語のテキストを全文検索したい場合にステミング機能を使えるようになりました。使い方は公式ドキュメントを参照してください。

PGroongaのインデックスの自動復旧機能の追加

PostgreSQLを強制終了するとPGroongaのインデックスが壊れることがあります。滅多なことで強制終了するものではありませんが、せざるを得ない場合もあり、そのときに壊れることがあります。

pgroonga_checkモジュールを使うと起動時にPGroongaのインデックスをチェックし、壊れていたら自動で復旧できます。強制終了が起こり得る場合はこのモジュールを使ってみてください。

2.0.0へのスムーズな移行の準備

PGroonga 2.0.0では今よりもっと柔軟に検索できるようになる予定です。ただ、そのために現在の使い方と互換性がなくなる箇所があります。

互換性がなくなるとアップグレードが大変になるため、できるだけスムーズにアップグレードできるようにしたいものです。

そのために、今回のリリースから徐々に2.0.0と同じ使い方もできるようにしはじめました。2.0.0と同じ使い方に徐々に変更していくことでスムーズにアップグレードできるようになるだろうという寸法です。

具体的には以下の2.0.0での全文検索用の演算子を1.2.0でも使えるようにしました。

今後は1.xでも&@&?を使うようにしてください。これらを使っておけば変更なしに2.0.0でも動きます。%%@@は非推奨とします。

2.0.0は近いうちにリリースする予定ですが、2.0.0でも1.xの演算子を使えるようにするなど、できるだけスムーズにアップグレードできるようにする予定です。お楽しみに。

アップグレード方法

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

おしらせ

PGroongaのサポートサービスを提供しています。インデックスや検索の設計方法に関するコンサルティングやトラブル時の調査、パフォーマンス改善・新機能追加などの技術支援など、PGroongaに関わるサポートが必要な場合はご相談ください。

まとめ

PGroongaの新しいリリースを紹介しました。インデックス破損の自動復旧が追加されたりしてどんどん使いやすくなっています。

ここで紹介したもの以外の変更点はリリースノートを参照してください。

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