Navigation Menu

Skip to content

Commit

Permalink
Add an article about PGroonga 0.2.0
Browse files Browse the repository at this point in the history
  • Loading branch information
kou committed Jan 29, 2015
1 parent 74cf254 commit 88c70a9
Showing 1 changed file with 89 additions and 0 deletions.
89 changes: 89 additions & 0 deletions ja/_posts/2015-01-29-pgroonga-0.2.0.md
@@ -0,0 +1,89 @@
---
layout: post.ja
title: PGroonga 0.2.0リリース - PostgreSQL 9.4でGroongaを使える!
description: PGroonga 0.2.0をリリースしました!PostgreSQL 9.4でGroongaを使えます!
---

## PGroonga 0.2.0リリース - PostgreSQL 9.4でGroongaを使える!

PostgreSQLからGroongaを使えるようにする[PGroonga](https://github.com/pgroonga/pgroonga)の最初のバージョン、0.2.0をリリースしました!

PGroongaは最新のPostgreSQL 9.4で使えます。PostgreSQLからGroongaを使うためのプラグインとして[textsearch_groonga](http://textsearch-ja.projects.pgfoundry.org/textsearch_groonga.html)という拡張機能もありますが、この拡張機能はPostgreSQL 9.4や新しいGroongaでは動きませんでした。

PGroongaはtextsearch\_groongaをベースに、最新のPostgreSQL・Groongaで動くようにしたものです。

PostgreSQLで日本語全文検索をする方法には次の方法がありますが、それぞれいくつか問題があります。

* [pg_trgm](https://www.postgresql.jp/document/9.3/html/pgtrgm.html)
* PostgreSQLに付属しているがデフォルトではインストールされない。
* 日本語に対応させるにはソースコードを変更する必要がある。
* [pg_bigm](http://pgbigm.sourceforge.jp/)
* 正確な全文検索機能を使うには[Recheck機能](http://pgbigm.sourceforge.jp/pg_bigm-1-1.html#enable_recheck)を有効にする必要がある。Recheck機能を有効にするとインデックスを使った検索をしてから、インデックスを使って見つかったレコードに対してシーケンシャルに検索をするのでインデックスを使った検索でのヒット件数が多くなると遅くなりやすい。

PGroongaはRecheck機能を使わなくても正確な検索結果を返せるため、ヒット件数が多い時でも性能が落ちにくいです。理論的には。(要ベンチマーク。興味のある人はベンチマークをとって公開してください!)

ただし、PGroongaはWALに対応していないため、PostgreSQLのレプリケーションの仕組みを使えません。[pgpool-II](http://www.pgpool.net/jp/)と組み合わせる必要があります。

(WALに対応していないのはPostgreSQLがWALに対応する仕組みを提供していないからです。PostgreSQLのメーリングリストで聞いたところ、開発中ということでした。9.6で入るといいなぁということです。)

## インストール方法

現在、CentOS 7用のパッケージのみ提供しています。(次のリリースではUbuntu 14.10用のパッケージも提供する予定です。)CentOS 7ユーザーの人は簡単にインストールできます。他の環境の方はソースからインストールしてください。

インストール方法の詳細は[README.mdのインストールの項目](https://github.com/pgroonga/pgroonga#%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)を参照してください。

## 使い方

簡単に使い方を紹介します。

まず、`text`型のカラムを作って`pgroonga`インデックスを張ります。

```sql
CREATE TABLE memos (
id integer,
content text
);

CREATE INDEX pgroonga_index ON memos USING pgroonga (content);
```

データを投入します。

```sql
INSERT INTO memos VALUES (1, 'PostgreSQLはリレーショナル・データベース管理システムです。');
INSERT INTO memos VALUES (2, 'Groongaは日本語対応の高速な全文検索エンジンです。');
INSERT INTO memos VALUES (3, 'PGroongaはインデックスとしてGroongaを使うためのPostgreSQLの拡張機能です。');
```

検索します、といきたいところですがその前に少し準備をします。ここではシーケンシャルスキャンではなくインデックスを使った全文検索を使いたいので、シーケンシャルスキャン機能を無効にします。(あるいはもっとたくさんのデータを投入します。)

```sql
SET enable_seqscan = off;
```

全文検索をするときは`%%`演算子を使います。

```sql
SELECT * FROM memos WHERE content %% '全文検索';
-- id | content
-- ----+---------------------------------------------------
-- 2 | Groongaは日本語対応の高速な全文検索エンジンです。
-- (1 行)
```

`キーワード1 OR キーワード2`のようにクエリー構文を使って全文検索をするときは`@@`演算子を使います。

```sql
SELECT * FROM memos WHERE content @@ 'PGroonga OR PostgreSQL';
-- id | content
-- ----+---------------------------------------------------------------------------
-- 3 | PGroongaはインデックスとしてGroongaを使うためのPostgreSQLの拡張機能です。
-- 1 | PostgreSQLはリレーショナル・データベース管理システムです。
-- (2 行)
```

クエリー構文の詳細は[Groongaのドキュメント](http://groonga.org/ja/docs/reference/grn_expr/query_syntax.html)を参照してください。

## まとめ

最新のPostgreSQLでGroongaを使えるようにするPGroongaという拡張機能をリリースしました。PostgreSQLで日本語全文検索をしたいという方はぜひ試してみてください!試してみた方はいろんな人が参照できるようにぜひブログなどに結果を書いてください。特にベンチマーク結果を楽しみにしています!

0 comments on commit 88c70a9

Please sign in to comment.