Navigation Menu

Skip to content

Commit

Permalink
PGroonga 1.0.0 has been released!!!
Browse files Browse the repository at this point in the history
  • Loading branch information
kou committed Oct 29, 2015
1 parent 9d9afa6 commit d310eb3
Showing 1 changed file with 138 additions and 0 deletions.
138 changes: 138 additions & 0 deletions ja/_posts/2015-10-29-pgroonga-1.0.0.md
@@ -0,0 +1,138 @@
---
layout: post.ja
title: PGroonga(ぴーじーるんが) 1.0.0リリース
description: PGroonga(ぴーじーるんが) 1.0.0をリリースしました!
---

## PGroonga(ぴーじーるんが) 1.0.0リリース

今日は肉の日ですね!

PostgreSQLからGroongaを使えるようにする[PGroonga](http://pgroonga.github.io/ja/)の1.0.0をリリースしました!最初のメジャーリリースです!

### PGroongaについて

PGroongaはPostgreSQLを高速に日本語全文検索可能なシステムに拡張する魔法のような拡張機能です。PGroongaの他にも類似の拡張機能はありますが、速度・機能面で他の拡張機能とは一線を画しています。これはPGroongaはバックエンドに[Groonga](http://groonga.org/ja/)という本格的な全文検索エンジンを使っているためです。

速度面では類似の拡張機能である[pg_bigm](http://pgbigm.osdn.jp/)よりも高速です。インデックス作成時間、検索時間ともに数倍から10倍以上高速です。

[PostgreSQLで日本語全文検索 - LIKEとpg_bigmとPGroonga - ククログ(2015-05-25)](http://www.clear-code.com/blog/2015/5/25.html)に日本語版Wikipediaのデータを使って計測した結果があります。

まずはインデックス作成にかかった時間です。

拡張機能 | インデックス作成時間
---------|--------------------
PGroonga | 25分37秒
pg_bigm | 5時間56分15秒

このケースでは約14倍高速です。

検索時間は次の通りです。

検索語 | ヒット数 | PGroongaの検索時間 | pg_bigmの検索時間
-----------------------------|----------|--------------------|-----------------
「PostgreSQL」または「MySQL」 | 368 | *0.030s* | 0.107s
データベース | 17172 | 0.121s | 1.224s
テレビアニメ | 22885 | 0.179s | 2.472s
日本 | 625792 | 0.646s | 0.556s

「日本」で検索した場合はpg\_bigmの方がやや速い(*)ですがそれ以外の場合ではPGroongaの方が3倍から14倍ほど高速です。どのような検索後に対しても安定して高い性能を出していると言えます。

(*) pg\_bigmは3文字以上の検索語より2文字以下の検索後の方が得意です。

機能面では他の類似拡張機能にはない次の機能を提供しています。

* ノーマライズ機能
* トークナイザーのカスタマイズ機能
* スニペット機能

ノーマライズ機能とは異なる表記のテキストを同等の表記のテキストに統一する処理です。

簡単なものでは「ポスグレ」というようにいわゆる半角カタカナで書かれたテキストも「ポスグレ」もどちらも「ポスグレ」というようにいわゆる全角カタカナに統一します。こうすることにより「ポスグレ」(全角カタカナ)で検索しても「ポスグレ」(半角カタカナ)で書かれたテキストでもヒットするようになります。

難しいものだと「㍊」は「ミリバール」に変換します。これらは[UnicodeのNFKC](http://unicode.org/reports/tr15/)という方法をベースにしています。

トークナイザーのカスタマイズ機能とは検索キーワードとなるキーワードの抽出する処理(トークナイズ処理)をカスタマイズできる機能です。抽出処理をカスタマイズすることにより、検索精度・検索性能のトレードオフをユーザーがコントロールできるようになります。

たとえば、「形態素解析器を使ったトークナイザー」というものにすれば精度・性能は向上しますが、検索漏れが発生することがあります。なお、他の類似拡張機能で形態素解析器を使ったトークナイズ処理をできるものはありません。PGroongaだけです。

「形態素解析器を使ったトークナイザー」には[MeCab](http://taku910.github.io/mecab/)(OSS)を使ったものと[JMAT](http://www.slideshare.net/JSUXDesign/jmat-groonga-tokenizertalks20150320)(非OSSの商用製品)を使ったものがあります。バックエンドで使っているGroongaはトークナイザーをプラグインとして追加できる機能を提供しているため様々なプロダクトを活用してトークナイザーを実装できるのです。

スニペット機能とはWeb検索エンジンがよく使っている機能でキーワード周辺のテキストを表示しているものです。Googleもヒットしたページのタイトルの下にキーワード周辺のテキストを出していますよね。それのことです。PGroongaはそれを実現する関数を提供しています。

他にも次の機能を提供しています。

* Web検索エンジンが使っているようなクエリー言語
* JSON検索
* 個々の要素も検索できますし、JSON内のすべてのテキストに対して全文検索することもできます。

現在は未実装ですが、今後、提供予定の機能には次のような機能があります。これらはGroongaでは実装されている機能です。

* クエリー展開機能
* 重み付け指定機能
* ステミング機能

### 使い方

PGroongaは全文検索のことをあまり知らなくても簡単に使えます。インデックスを作成して`WHERE`に条件を指定するだけです。

```sql
CREATE INDEX index_name ON table USING pgroonga (column);

SELECT * FROM table WHERE column @@ '全文検索';
```

`LIKE`でもインデックスを使って検索できる機能を提供しているため、既存アプリケーションで次のように書いていたとしてもアプリケーションを変更せずに高速にできます。

```sql
SELECT * FROM table WHERE column LIKE '%全文検索%';
```

興味がでてきましたか?[インストール](http://pgroonga.github.io/ja/install/)して[チュートリアル](http://pgroonga.github.io/ja/tutorial/)を試してみてください。一通りの機能を確認できます。

インストールも簡単です。主要なプラットフォーム用にパッケージを提供しているからです。Windows用のバイナリーも提供しています。

## おしらせ

1ヶ月後の2015年11月29日にPGroongaのイベントを開催します。PGroongaに興味がでてきた方はぜひお越しください。

* [Groonga Meatup 2015](https://groonga.doorkeeper.jp/events/31482)

会場および懇親会の飲食物を[ぐるなび](http://gnavi.co.jp/)さんに提供してもらえることになりました。そのため、無料で懇親会まで参加でき、PGroongaの情報、他のユーザーがどのように使っているかの情報などを得ることができるイベントになっています。

PGroongaの実装に興味のある方は↑の2日前の11月27日に開催される[PostgreSQLカンファレンス2015](https://www.postgresql.jp/events/jpug-pgcon2015)へお越しください。開発者が「PGroongaの実装」というタイトルで発表します。

PGroongaだけでなく全文検索についても興味がある方は来週の11月6日に開催の「Groongaで学ぶ全文検索」への参加もご検討ください。「Groongaで学ぶ全文検索」は予習・復習なしで全文検索を学ぶ、参加者に合わせて内容を決める、という限られた時間内でできるだけ実りある時間にしようというスタイルの勉強会です。全文検索を学びたい!という方はご活用ください。

* [Groongaで学ぶ全文検索 2015-11-06](https://groonga.doorkeeper.jp/events/33701)

## 既存ユーザー向け情報

ここまではPGroongaを知らない人向けに書いてきましたが、このセクションだけは既存ユーザー向けの情報になります。

### アップグレード方法

1.0.0は過去のバージョンと互換性がありません。[アップグレード](http://pgroonga.github.io/ja/upgrade/)の「非互換の場合」用の手順でアップグレードしてください。

### 1.0.0での変更点

0.9.0から1.0.0での変更点は次の通りです。

* インデックスオンリースキャンをサポートしました。
* インデックスを使った場合でも使わない場合でも`LIKE`が同じ結果を返すようになりました。その代わり速度は遅くなっています。ヒット数が多くなるほど遅くなる傾向があります。(PostgreSQLが提供するRecheck機能を使っているため。)
* `ILIKE`をサポートしました。
* 正規表現を使った検索をサポートしました。
* Winodws用のバイナリーにMeCabをバンドルするようにしました。

### イベント発表のおねがい

1ヶ月後の2015年11月29日に開催する[PGroongaのイベント](https://groonga.doorkeeper.jp/events/31482)では「PGroongaを使っていてよかったこと」というテーマで発表者を募集しています。PGroongaを使っていて助かった・役立っているという方はぜひこの機会に教えてください。他のユーザーの参考にもなりますし、なにより開発者の励みになります。PGroongaの開発が活発に続くとうれしいという方はぜひご協力ください。

詳細は次のページを参照してください。

* [Groonga Meatup 2015 - 募集要項](https://groonga.doorkeeper.jp/events/31482#public-offering)
* [Groonga Meatup 2015 - 発表応募](https://github.com/groonga/meetup/issues/12)

## まとめ

最新のPostgreSQLでGroongaを使えるようにするPGroongaの新しいバージョンをリリースしました。はじめてのメジャーリリースです。PostgreSQLで日本語全文検索をしたいという方はぜひ試してみてください!

0 comments on commit d310eb3

Please sign in to comment.