Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

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

Yujiro3
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away