LoginSignup
6
5

More than 5 years have passed since last update.

PHPからGroongaを利用する - PHPバインディング

Last updated at Posted at 2014-12-02

GroongaのPHPバインディングを使ってアクセス

PHP bindings for Groonga.

インストール

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クラス

サンプル

micro_blog.php

接続処理

/* GQTPによる接続 */
$gdb = new Groonga('127.0.0.1', 10043);


/* 内部DBとして利用する */
$gdb = new Groonga('./db/test.db');

ポート番号を指定するとGQTPで接続するようになります。

Groonga組み込みコマンド

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の組み込みコマンドが楽ちん過ぎて普通の書き方に戻れない。。。

6
5
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5