GroongaのPHPバインディングを使ってアクセス
インストール
Groongaライブラリ
$ sudo aptitude install -y libgroonga0 libgroonga-dev
Groonga v4.0.7で追加されたC-APIを利用しています。
最新版のライブラリを利用してください。
Proongaのインストール
$ git clone https://github.com/Yujiro3/proonga.git
$ cd ./proonga
$ phpize
$ ./configure
$ make
$ sudo -s
# make install
# cd /etc/php5/mods-available
# echo extension=groonga.so > proonga.ini
# cd /etc/php5/conf.d
# ln -s ../mods-available/proonga.ini ./30-proonga.ini
php_json_encode_exを利用してます。
php5-jsonを有効にしてください。
CentOSなどでは、php-commonに含まれているので
proonga.iniの読み込みタイミングに気をつけてください。
phpの下位互換用の分岐を書いていません。
php5.3.x以上で動くと思いますが、PHP 5.5.18で開発しているためそれ以上のバージョンをオススメします。
クラス一覧
Groongaクラス
GCommandクラス
GTableクラス
GColumnクラス
GLoadクラス
GDeleteクラス
GSelectクラス
サンプル
接続処理
/* GQTPによる接続 */
$gdb = new Groonga('127.0.0.1', 10043);
/* 内部DBとして利用する */
$gdb = new Groonga('./db/test.db');
ポート番号を指定するとGQTPで接続するようになります。
Groonga組み込みコマンド
$gdb = new Groonga('./db/test.db');
$result = $gdb->command('status')->exec();
登録されているコマンドは何でも使えるようになります。
メソッドチェーンで呼び出し
メソッドチェーンで実行できるようにしたらやたらとクラスが多くなりました。
Groongaクラスから各クラスが呼び出される感じです。
コード
/* select --table Users --match_columns name,location_str,description --query "New York" --output_columns _key,name */
$result = $gdb->table('Users')
->select()
->matchColumns('name,location_str,description')
->query('"New York"')
->outputColumns('_key,name')
->exec(true);
echo json_encode($result, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_BIGINT_AS_STRING);
結果
[
[
[
1
],
[
[
"_key",
"ShortText"
],
[
"name",
"ShortText"
]
],
[
"bob",
"Bob"
]
]
]
基本はGroongaの組み込みコマンドを実行するクラス群です。
極力ソースを書かないように心がけたのでバグも少ないはずです。
CentOSでzend_call_method_with_*_params()関数がうまく動かなかったので
MongoDBのバインディングとかが使っている方法を試してみました。
とりあえず問題ないようです。
Groongaの組み込みコマンドが楽ちん過ぎて普通の書き方に戻れない。。。