C++
groonga

Groonga組み込みコマンドの利用

More than 3 years have passed since last update.

Groonga組み込みコマンド

define_selector

define_selector - 検索コマンドを定義

引数

名前 Offset 概要
name 0
table 1
match_columns 2
query 3
filter 4
scorer 5
sortby 6
output_columns 7
offset 8
limit 9
drilldown 10
drilldown_sortby 11
drilldown_output_columns 12
drilldown_offset 13
drilldown_limit 14
cache 15
match_escalation_threshold 16
query_expansion 17
query_flags 18
query_expander 19
adjuster 20
  /* コマンドを取得 */
  grn_obj *command = grn_ctx_get(ctx, "define_selector", strlen("define_selector"));

  /* 引数を取得して値を設定 */
  grn_obj *name = grn_expr_get_var(ctx, command, "name", strlen("name"));
  grn_obj_reinit(ctx, name, GRN_DB_TEXT, 0);
  GRN_TEXT_PUTS(ctx, name, "user_selector");

  /* Offsetから引数を取得して値を設定 */
  grn_obj *table = grn_expr_get_var_by_offset(ctx, command, 1);
  grn_obj_reinit(ctx, table, GRN_DB_TEXT, 0);
  GRN_TEXT_PUTS(ctx, table, "User");

  /* コマンドの実行*/
  grn_expr_exec(ctx, command, 0);

  /* コマンド結果の取得 */
  grn_ctx_info info;
  grn_ctx_info_get(ctx, &info);
  printf("%.*s\n", (int)GRN_TEXT_LEN(info.outbuf), GRN_TEXT_VALUE(info.outbuf));

結果

true

select

select はテーブルから指定された条件にマッチするレコードを検索し、見つかったレコードを出力します。

引数

名前 Offset 概要
table 0
match_columns 1
query 2
filter 3
scorer 4
sortby 5
output_columns 6
offset 7
limit 8
drilldown 9
drilldown_sortby 10
drilldown_output_columns 11
drilldown_offset 12
drilldown_limit 13
cache 14
match_escalation_threshold 15
query_expansion 16
query_flags 17
query_expander 18
adjuster 19
  /* コマンドを取得 */
  grn_obj *command = grn_ctx_get(ctx, "select", strlen("select"));

  /* 引数を取得して値を設定 */
  grn_obj *table = grn_expr_get_var(ctx, command, "table", strlen("table"));
  grn_obj_reinit(ctx, table, GRN_DB_TEXT, 0);
  GRN_TEXT_PUTS(ctx, table, "Entries");

  /* 実行と出力 */
  grn_expr_exec(ctx, command, 0);
  grn_ctx_info info;
  grn_ctx_info_get(ctx, &info);
  printf("%.*s\n", (int)GRN_TEXT_LEN(info.outbuf), GRN_TEXT_VALUE(info.outbuf));

結果

[
  [
    [
      5
    ],
    [
      [
        "_id",
        "UInt32"
      ],
      [
        "_key",
        "ShortText"
      ],
      [
        "content",
        "Text"
      ],
      [
        "n_likes",
        "UInt32"
      ]
    ],
    [
      1,
      "The first post!",
      "Welcome! This is my first post!",
      5
    ],
    [
      2,
      "Groonga",
      "I started to use groonga. It's very fast!",
      10
    ],
    [
      3,
      "Mroonga",
      "I also started to use mroonga. It's also very fast! Really fast!",
      15
    ],
    [
      4,
      "Good-bye Senna",
      "I migrated all Senna system!",
      3
    ],
    [
      5,
      "Good-bye Tritonn",
      "I also migrated all Tritonn system!",
      3
    ]
  ]
]

結果の取得方法grn_ctx_recv

  /* コマンドを取得 */
  grn_obj *command = grn_ctx_get(ctx, "select", strlen("select"));

  /* 引数を取得して値を設定 */
  grn_obj *table = grn_expr_get_var(ctx, command, "table", strlen("table"));
  grn_obj_reinit(ctx, table, GRN_DB_TEXT, 0);
  GRN_TEXT_PUTS(ctx, table, "Entries");

  /* 実行 */
  grn_expr_exec(ctx, command, 0);

  /* 結果の取得 */
  char *result;
  unsigned int result_length;
  int recv_flags;

  grn_ctx_recv(ctx, &result, &result_length, &recv_flags);
  printf("%.*s\n", result_length, result);

load

load は、使用しているデータベースのテーブルにレコードを登録し、カラムの値を更新します。

引数

名前 Offset 概要
values 0
table 1
columns 2
ifexists 3
input_type 4
each 5
  /* コマンドを取得 */
  grn_obj *command = grn_ctx_get(ctx, "load", strlen("load"));

  /* 引数を取得して値を設定 */
  grn_obj *values = grn_expr_get_var(ctx, command, "values", strlen("values"));
  grn_obj_reinit(ctx, values, GRN_DB_TEXT, 0);
  GRN_TEXT_PUTS(ctx, values, "[{\"_key\":\"The first post!\", \"content\": \"Welcome! This is my first post!\", \"n_likes\": 5}]");

  /* 引数を取得して値を設定 */
  grn_obj *table = grn_expr_get_var(ctx, command, "table", strlen("table"));
  grn_obj_reinit(ctx, table, GRN_DB_TEXT, 0);
  GRN_TEXT_PUTS(ctx, table, "Entries");

  /* コマンドの実行*/
  grn_expr_exec(ctx, command, 0);

  /* コマンド結果の取得 */
  grn_ctx_info info;
  grn_ctx_info_get(ctx, &info);
  printf("%.*s\n", (int)GRN_TEXT_LEN(info.outbuf), GRN_TEXT_VALUE(info.outbuf));

結果

1

status

status - groongaプロセスの状態表示

引数

なし

  /* コマンドを取得 */
  grn_obj *command = grn_ctx_get(ctx, "status", strlen("status"));

  /* コマンドの実行*/
  grn_expr_exec(ctx, command, 0);

  /* コマンド結果の取得 */
  grn_ctx_info info;
  grn_ctx_info_get(ctx, &info);
  printf("%.*s\n", (int)GRN_TEXT_LEN(info.outbuf), GRN_TEXT_VALUE(info.outbuf));

結果

{
  "alloc_count": 141,
  "starttime": 1414132653,
  "uptime": 0,
  "version": "4.0.5",
  "n_queries": 0,
  "cache_hit_rate": 0,
  "command_version": 1,
  "default_command_version": 1,
  "max_command_version": 2
}

table_list

table_list - DBに定義されているテーブルをリスト表示

引数

なし

  /* コマンドを取得 */
  grn_obj *command = grn_ctx_get(ctx, "table_list", strlen("table_list"));

  /* コマンドの実行*/
  grn_expr_exec(ctx, command, 0);

  /* コマンド結果の取得 */
  grn_ctx_info info;
  grn_ctx_info_get(ctx, &info);
  printf("%.*s\n", (int)GRN_TEXT_LEN(info.outbuf), GRN_TEXT_VALUE(info.outbuf));

結果

[
  [
    [
      "id",
      "UInt32"
    ],
    [
      "name",
      "ShortText"
    ],
    [
      "path",
      "ShortText"
    ],
    [
      "flags",
      "ShortText"
    ],
    [
      "domain",
      "ShortText"
    ],
    [
      "range",
      "ShortText"
    ],
    [
      "default_tokenizer",
      "ShortText"
    ],
    [
      "normalizer",
      "ShortText"
    ]
  ],
  [
    260,
    "Entries",
    "db/test.db.0000104",
    "TABLE_HASH_KEY|PERSISTENT",
    "ShortText",
    null,
    null,
    null
  ],
  [
    263,
    "Terms",
    "db/test.db.0000107",
    "TABLE_PAT_KEY|PERSISTENT",
    "ShortText",
    null,
    "TokenBigram",
    "NormalizerAuto"
  ],
  [
    256,
    "Users",
    "db/test.db.0000100",
    "TABLE_PAT_KEY|PERSISTENT",
    "ShortText",
    null,
    null,
    null
  ]
]

column_list

column_list コマンドはテーブルにあるカラムの一覧を返します。

引数

名前 Offset 概要
table 0
  /* コマンドを取得 */
  grn_obj *command = grn_ctx_get(ctx, "column_list", strlen("column_list"));

  /* 引数を取得して値を設定 */
  grn_obj *table = grn_expr_get_var(ctx, command, "table", strlen("table"));
  grn_obj_reinit(ctx, table, GRN_DB_TEXT, 0);
  GRN_TEXT_PUTS(ctx, table, "Entries");

  /* コマンドの実行*/
  grn_expr_exec(ctx, command, 0);

  /* コマンド結果の取得 */
  grn_ctx_info info;
  grn_ctx_info_get(ctx, &info);
  printf("%.*s\n", (int)GRN_TEXT_LEN(info.outbuf), GRN_TEXT_VALUE(info.outbuf));

結果

[
  [
    [
      "id",
      "UInt32"
    ],
    [
      "name",
      "ShortText"
    ],
    [
      "path",
      "ShortText"
    ],
    [
      "type",
      "ShortText"
    ],
    [
      "flags",
      "ShortText"
    ],
    [
      "domain",
      "ShortText"
    ],
    [
      "range",
      "ShortText"
    ],
    [
      "source",
      "ShortText"
    ]
  ],
  [
    260,
    "_key",
    "",
    "",
    "COLUMN_SCALAR",
    "Entries",
    "ShortText",
    []
  ],
  [
    261,
    "content",
    "db/test.db.0000105",
    "var",
    "COLUMN_SCALAR|PERSISTENT",
    "Entries",
    "Text",
    []
  ],
  [
    262,
    "n_likes",
    "db/test.db.0000106",
    "fix",
    "COLUMN_SCALAR|PERSISTENT",
    "Entries",
    "UInt32",
    []
  ]
]

table_create

table_create は現在のデータベースに新しいテーブルを作成します。データを保存したり検索したりするために、1つ以上のテーブルを作成する必要があります。

引数

名前 Offset 概要
name 0
flags 1
key_type 2
value_type 3
default_tokenizer 4
normalizer 5
token_filters 6
  /* コマンドを取得 */
  grn_obj *command = grn_ctx_get(ctx, "table_create", strlen("table_create"));

  /* 引数を取得して値を設定 */
  grn_obj *name = grn_expr_get_var(ctx, command, "name", strlen("name"));
  grn_obj_reinit(ctx, name, GRN_DB_TEXT, 0);
  GRN_TEXT_PUTS(ctx, name, "Lexicon");

  /* 引数を取得して値を設定 */
  grn_obj *flags = grn_expr_get_var(ctx, command, "flags", strlen("flags"));
  grn_obj_reinit(ctx, flags, GRN_DB_TEXT, 0);
  GRN_TEXT_PUTS(ctx, flags, "TABLE_PAT_KEY");

  /* 引数を取得して値を設定 */
  grn_obj *type = grn_expr_get_var(ctx, command, "key_type", strlen("key_type"));
  grn_obj_reinit(ctx, type, GRN_DB_TEXT, 0);
  GRN_TEXT_PUTS(ctx, type, "ShortText");

  /* 引数を取得して値を設定 */
  grn_obj *tokenizer = grn_expr_get_var(ctx, command, "default_tokenizer", strlen("default_tokenizer"));
  grn_obj_reinit(ctx, tokenizer, GRN_DB_TEXT, 0);
  GRN_TEXT_PUTS(ctx, tokenizer, "TokenBigram");

  /* 引数を取得して値を設定 */
  grn_obj *normalizer = grn_expr_get_var(ctx, command, "normalizer", strlen("normalizer"));
  grn_obj_reinit(ctx, normalizer, GRN_DB_TEXT, 0);
  GRN_TEXT_PUTS(ctx, normalizer, "NormalizerAuto");

  /* コマンドの実行*/
  grn_expr_exec(ctx, command, 0);

  /* コマンド結果の取得 */
  grn_ctx_info info;
  grn_ctx_info_get(ctx, &info);
  printf("%.*s\n", (int)GRN_TEXT_LEN(info.outbuf), GRN_TEXT_VALUE(info.outbuf));

結果

true

table_remove

table_remove - テーブルの削除

引数

名前 Offset 概要
name 0
  /* コマンドを取得 */
  grn_obj *command = grn_ctx_get(ctx, "table_remove", strlen("table_remove"));

  /* 引数を取得して値を設定 */
  grn_obj *name = grn_expr_get_var(ctx, command, "name", strlen("name"));
  grn_obj_reinit(ctx, name, GRN_DB_TEXT, 0);
  GRN_TEXT_PUTS(ctx, name, "Lexicon");

  /* コマンドの実行*/
  grn_expr_exec(ctx, command, 0);

  /* コマンド結果の取得 */
  grn_ctx_info info;
  grn_ctx_info_get(ctx, &info);
  printf("%.*s\n", (int)GRN_TEXT_LEN(info.outbuf), GRN_TEXT_VALUE(info.outbuf));

結果

true

table_rename

引数

名前 Offset 概要
name 0
new_name 1
  /* コマンドを取得 */
  grn_obj *command = grn_ctx_get(ctx, "table_rename", strlen("table_rename"));

  /* 引数を取得して値を設定 */
  grn_obj *name = grn_expr_get_var(ctx, command, "name", strlen("name"));
  grn_obj_reinit(ctx, name, GRN_DB_TEXT, 0);
  GRN_TEXT_PUTS(ctx, name, "Entries");

  /* 引数を取得して値を設定 */
  grn_obj *new = grn_expr_get_var(ctx, command, "new_name", strlen("new_name"));
  grn_obj_reinit(ctx, new, GRN_DB_TEXT, 0);
  GRN_TEXT_PUTS(ctx, new, "Entry");

  /* コマンドの実行*/
  grn_expr_exec(ctx, command, 0);

  /* コマンド結果の取得 */
  grn_ctx_info info;
  grn_ctx_info_get(ctx, &info);
  printf("%.*s\n", (int)GRN_TEXT_LEN(info.outbuf), GRN_TEXT_VALUE(info.outbuf));

結果

true

column_create

column_create - カラムの追加

引数

名前 Offset 概要
table 0
name 1
flags 2
type 3
source 4
  /* コマンドを取得 */
  grn_obj *command = grn_ctx_get(ctx, "column_create", strlen("column_create"));

  /* 引数を取得して値を設定 */
  grn_obj *table = grn_expr_get_var(ctx, command, "table", strlen("table"));
  grn_obj_reinit(ctx, table, GRN_DB_TEXT, 0);
  GRN_TEXT_PUTS(ctx, table, "Entry");

  /* 引数を取得して値を設定 */
  grn_obj *name = grn_expr_get_var(ctx, command, "name", strlen("name"));
  grn_obj_reinit(ctx, name, GRN_DB_TEXT, 0);
  GRN_TEXT_PUTS(ctx, name, "body");

  /* 引数を取得して値を設定 */
  grn_obj *type = grn_expr_get_var(ctx, command, "type", strlen("type"));
  grn_obj_reinit(ctx, type, GRN_DB_TEXT, 0);
  GRN_TEXT_PUTS(ctx, type, "ShortText");

  /* コマンドの実行*/
  grn_expr_exec(ctx, command, 0);

  /* コマンド結果の取得 */
  grn_ctx_info info;
  grn_ctx_info_get(ctx, &info);
  printf("%.*s\n", (int)GRN_TEXT_LEN(info.outbuf), GRN_TEXT_VALUE(info.outbuf));

結果

true

column_remove

column_remove - テーブルに定義されているカラムの削除

引数

名前 Offset 概要
table 0
name 1
  /* コマンドを取得 */
  grn_obj *command = grn_ctx_get(ctx, "column_remove", strlen("column_remove"));

  /* 引数を取得して値を設定 */
  grn_obj *table = grn_expr_get_var(ctx, command, "table", strlen("table"));
  grn_obj_reinit(ctx, table, GRN_DB_TEXT, 0);
  GRN_TEXT_PUTS(ctx, table, "Entry");

  /* 引数を取得して値を設定 */
  grn_obj *name = grn_expr_get_var(ctx, command, "name", strlen("name"));
  grn_obj_reinit(ctx, name, GRN_DB_TEXT, 0);
  GRN_TEXT_PUTS(ctx, name, "body");


  /* コマンドの実行*/
  grn_expr_exec(ctx, command, 0);

  /* コマンド結果の取得 */
  grn_ctx_info info;
  grn_ctx_info_get(ctx, &info);
  printf("%.*s\n", (int)GRN_TEXT_LEN(info.outbuf), GRN_TEXT_VALUE(info.outbuf));

結果

true

column_rename

column_rename コマンドはカラム名を変更します。

引数

名前 Offset 概要
table 0
name 1
new_name 2
  /* コマンドを取得 */
  grn_obj *command = grn_ctx_get(ctx, "column_rename", strlen("column_rename"));

  /* 引数を取得して値を設定 */
  grn_obj *table = grn_expr_get_var(ctx, command, "table", strlen("table"));
  grn_obj_reinit(ctx, table, GRN_DB_TEXT, 0);
  GRN_TEXT_PUTS(ctx, table, "Entry");

  /* 引数を取得して値を設定 */
  grn_obj *name = grn_expr_get_var(ctx, command, "name", strlen("name"));
  grn_obj_reinit(ctx, name, GRN_DB_TEXT, 0);
  GRN_TEXT_PUTS(ctx, name, "body");

  /* 引数を取得して値を設定 */
  grn_obj *new = grn_expr_get_var(ctx, command, "new_name", strlen("new_name"));
  grn_obj_reinit(ctx, new, GRN_DB_TEXT, 0);
  GRN_TEXT_PUTS(ctx, new, "body2");

  /* コマンドの実行*/
  grn_expr_exec(ctx, command, 0);

  /* コマンド結果の取得 */
  grn_ctx_info info;
  grn_ctx_info_get(ctx, &info);
  printf("%.*s\n", (int)GRN_TEXT_LEN(info.outbuf), GRN_TEXT_VALUE(info.outbuf));

結果

true

expr_missing

引数

名前 Offset 概要
path 0

quit

quit - セッション終了

引数

なし

  /* コマンドを取得 */
  grn_obj *command = grn_ctx_get(ctx, "quit", strlen("quit"));

  /* コマンドの実行*/
  grn_expr_exec(ctx, command, 0);

  /* コマンド結果の取得 */
  grn_ctx_info info;
  grn_ctx_info_get(ctx, &info);
  printf("%.*s\n", (int)GRN_TEXT_LEN(info.outbuf), GRN_TEXT_VALUE(info.outbuf));

結果

true

shutdown

shutdown - サーバプロセスの停止

引数

なし

  /* コマンドを取得 */
  grn_obj *command = grn_ctx_get(ctx, "shutdown", strlen("shutdown"));

  /* コマンドの実行*/
  grn_expr_exec(ctx, command, 0);

  /* コマンド結果の取得 */
  grn_ctx_info info;
  grn_ctx_info_get(ctx, &info);
  printf("%.*s\n", (int)GRN_TEXT_LEN(info.outbuf), GRN_TEXT_VALUE(info.outbuf));

結果

true

clearlock

clearlock - オブジェクトにセットされたロックを解除する

引数

名前 Offset 概要
target_name 0
  /* コマンドを取得 */
  grn_obj *command = grn_ctx_get(ctx, "clearlock", strlen("clearlock"));

  /* コマンドの実行*/
  grn_expr_exec(ctx, command, 0);

  /* コマンド結果の取得 */
  grn_ctx_info info;
  grn_ctx_info_get(ctx, &info);
  printf("%.*s\n", (int)GRN_TEXT_LEN(info.outbuf), GRN_TEXT_VALUE(info.outbuf));

結果

true

defrag

defrag コマンドは指定されたオブジェクトのフラグメンテーションを解消します。

引数

名前 Offset 概要
target_name 0
threshold 1
  /* コマンドを取得 */
  grn_obj *command = grn_ctx_get(ctx, "defrag", strlen("defrag"));

  /* 引数を取得して値を設定 */
  grn_obj *name = grn_expr_get_var(ctx, command, "target_name", strlen("target_name"));
  grn_obj_reinit(ctx, name, GRN_DB_TEXT, 0);
  GRN_TEXT_PUTS(ctx, name, "Entry.body");

  /* コマンドの実行*/
  grn_expr_exec(ctx, command, 0);

  /* コマンド結果の取得 */
  grn_ctx_info info;
  grn_ctx_info_get(ctx, &info);
  printf("%.*s\n", (int)GRN_TEXT_LEN(info.outbuf), GRN_TEXT_VALUE(info.outbuf));

結果

true

log_level

log_level - ログ出力レベルの設定

引数

名前 Offset 概要
level 0
  /* コマンドを取得 */
  grn_obj *command = grn_ctx_get(ctx, "log_level", strlen("log_level"));

  /* 引数を取得して値を設定 */
  grn_obj *level = grn_expr_get_var(ctx, command, "level", strlen("level"));
  grn_obj_reinit(ctx, level, GRN_DB_TEXT, 0);
  GRN_TEXT_PUTS(ctx, level, "warning");

  /* コマンドの実行*/
  grn_expr_exec(ctx, command, 0);

  /* コマンド結果の取得 */
  grn_ctx_info info;
  grn_ctx_info_get(ctx, &info);
  printf("%.*s\n", (int)GRN_TEXT_LEN(info.outbuf), GRN_TEXT_VALUE(info.outbuf));

結果

true

log_put

log_put - ログ出力

引数

名前 Offset 概要
level 0
message 1
  /* コマンドを取得 */
  grn_obj *command = grn_ctx_get(ctx, "log_put", strlen("log_put"));

  /* 引数を取得して値を設定 */
  grn_obj *level = grn_expr_get_var(ctx, command, "level", strlen("level"));
  grn_obj_reinit(ctx, level, GRN_DB_TEXT, 0);
  GRN_TEXT_PUTS(ctx, level, "ERROR");

  /* 引数を取得して値を設定 */
  grn_obj *message = grn_expr_get_var(ctx, command, "message", strlen("message"));
  grn_obj_reinit(ctx, message, GRN_DB_TEXT, 0);
  GRN_TEXT_PUTS(ctx, message, "****MESSAGE****");

  /* コマンドの実行*/
  grn_expr_exec(ctx, command, 0);

  /* コマンド結果の取得 */
  grn_ctx_info info;
  grn_ctx_info_get(ctx, &info);
  printf("%.*s\n", (int)GRN_TEXT_LEN(info.outbuf), GRN_TEXT_VALUE(info.outbuf));

結果

true

log_reopen

引数

なし

  /* コマンドを取得 */
  grn_obj *command = grn_ctx_get(ctx, "log_reopen", strlen("log_reopen"));

  /* コマンドの実行*/
  grn_expr_exec(ctx, command, 0);

  /* コマンド結果の取得 */
  grn_ctx_info info;
  grn_ctx_info_get(ctx, &info);
  printf("%.*s\n", (int)GRN_TEXT_LEN(info.outbuf), GRN_TEXT_VALUE(info.outbuf));

結果

true

delete

delete コマンドは指定したテーブルのレコードを削除します。

引数

名前 Offset 概要
table 0
key 1
id 2
filter 3
  /* コマンドを取得 */
  grn_obj *command = grn_ctx_get(ctx, "delete", strlen("delete"));

  /* 引数を取得して値を設定 */
  grn_obj *table = grn_expr_get_var(ctx, command, "table", strlen("table"));
  grn_obj_reinit(ctx, table, GRN_DB_TEXT, 0);
  GRN_TEXT_PUTS(ctx, table, "Country");

  /* 引数を取得して値を設定 */
  grn_obj *key = grn_expr_get_var(ctx, command, "key", strlen("key"));
  grn_obj_reinit(ctx, key, GRN_DB_TEXT, 0);
  GRN_TEXT_PUTS(ctx, key, "United States");

  /* コマンドの実行*/
  grn_expr_exec(ctx, command, 0);

  /* コマンド結果の取得 */
  grn_ctx_info info;
  grn_ctx_info_get(ctx, &info);
  printf("%.*s\n", (int)GRN_TEXT_LEN(info.outbuf), GRN_TEXT_VALUE(info.outbuf));

結果

true

cache_limit

cache_limit は最大クエリーキャッシュエントリー数を取得・設定します。

引数

名前 Offset 概要
max 0
  /* コマンドを取得 */
  grn_obj *command = grn_ctx_get(ctx, "cache_limit", strlen("cache_limit"));

  /* コマンドの実行*/
  grn_expr_exec(ctx, command, 0);

  /* コマンド結果の取得 */
  grn_ctx_info info;
  grn_ctx_info_get(ctx, &info);
  printf("%.*s\n", (int)GRN_TEXT_LEN(info.outbuf), GRN_TEXT_VALUE(info.outbuf));

結果

100

dump

dump - データベースのスキーマとデータを出力する

引数

名前 Offset 概要
tables 0
  /* コマンドを取得 */
  grn_obj *command = grn_ctx_get(ctx, "dump", strlen("dump"));

  /* 引数を取得して値を設定 */
  grn_obj *tables = grn_expr_get_var(ctx, command, "tables", strlen("tables"));
  grn_obj_reinit(ctx, tables, GRN_DB_TEXT, 0);
  GRN_TEXT_PUTS(ctx, tables, "Users");

  /* コマンドの実行*/
  grn_expr_exec(ctx, command, 0);

  /* コマンド結果の取得 */
  grn_ctx_info info;
  grn_ctx_info_get(ctx, &info);
  printf("%.*s\n", (int)GRN_TEXT_LEN(info.outbuf), GRN_TEXT_VALUE(info.outbuf));

結果

table_create Country TABLE_HASH_KEY ShortText
table_create Users TABLE_HASH_KEY UInt32
column_create Users name COLUMN_SCALAR ShortText
column_create Users country COLUMN_SCALAR Country
load --table Users
[
["_key","country","name"],
[1,"","John"],
[2,"","Mike"],
[3,"Japan","Takashi"],
[4,"Japan","Hanako"]
]

register

register コマンドはプラグインを登録します。

引数

名前 Offset 概要
path 0
  /* コマンドを取得 */
  grn_obj *command = grn_ctx_get(ctx, "register", strlen("register"));

  /* 引数を取得して値を設定 */
  grn_obj *path = grn_expr_get_var(ctx, command, "path", strlen("path"));
  grn_obj_reinit(ctx, path, GRN_DB_TEXT, 0);
  GRN_TEXT_PUTS(ctx, path, "query_expanders/tsv");

  /* コマンドの実行*/
  grn_expr_exec(ctx, command, 0);

  /* コマンド結果の取得 */
  grn_ctx_info info;
  grn_ctx_info_get(ctx, &info);
  printf("%.*s\n", (int)GRN_TEXT_LEN(info.outbuf), GRN_TEXT_VALUE(info.outbuf));

結果

true

check

check - オブジェクトの状態表示

引数

名前 Offset 概要
obj 0
  /* コマンドを取得 */
  grn_obj *command = grn_ctx_get(ctx, "check", strlen("check"));

  /* 引数を取得して値を設定 */
  grn_obj *obj = grn_expr_get_var(ctx, command, "obj", strlen("obj"));
  grn_obj_reinit(ctx, obj, GRN_DB_TEXT, 0);
  GRN_TEXT_PUTS(ctx, obj, "Users.name");

  /* コマンドの実行*/
  grn_expr_exec(ctx, command, 0);

  /* コマンド結果の取得 */
  grn_ctx_info info;
  grn_ctx_info_get(ctx, &info);
  printf("%.*s\n", (int)GRN_TEXT_LEN(info.outbuf), GRN_TEXT_VALUE(info.outbuf));

結果

[
  {
    "flags": "0000C000",
    "curr seg": 0,
    "curr pos": 4194304,
    "max_element_size": 4096,
    "segregate_threshold": 16,
    "n_element_variation": 14
  },
  [
    {
      "seg id": 0,
      "seg type": 3,
      "seg value": 0
    }
  ]
]

truncate

truncate コマンドは指定したテーブルのレコードをすべて削除します。

引数

名前 Offset 概要
table 0
  /* コマンドを取得 */
  grn_obj *command = grn_ctx_get(ctx, "truncate", strlen("truncate"));

  /* 引数を取得して値を設定 */
  grn_obj *table = grn_expr_get_var(ctx, command, "table", strlen("table"));
  grn_obj_reinit(ctx, table, GRN_DB_TEXT, 0);
  GRN_TEXT_PUTS(ctx, table, "Users");

  /* コマンドの実行*/
  grn_expr_exec(ctx, command, 0);

  /* コマンド結果の取得 */
  grn_ctx_info info;
  grn_ctx_info_get(ctx, &info);
  printf("%.*s\n", (int)GRN_TEXT_LEN(info.outbuf), GRN_TEXT_VALUE(info.outbuf));

結果

true

normalize

normalize コマンドは指定したノーマライザーでテキストを正規化します。

引数

名前 Offset 概要
normalizer 0
string 1
flags 2
  /* コマンドを取得 */
  grn_obj *command = grn_ctx_get(ctx, "normalize", strlen("normalize"));

  /* 引数を取得して値を設定 */
  grn_obj *normalizer = grn_expr_get_var(ctx, command, "normalizer", strlen("normalizer"));
  grn_obj_reinit(ctx, normalizer, GRN_DB_TEXT, 0);
  GRN_TEXT_PUTS(ctx, normalizer, "NormalizerAuto");

  /* 引数を取得して値を設定 */
  grn_obj *string = grn_expr_get_var(ctx, command, "string", strlen("string"));
  grn_obj_reinit(ctx, string, GRN_DB_TEXT, 0);
  GRN_TEXT_PUTS(ctx, string, "aBcDe 123");

  /* コマンドの実行*/
  grn_expr_exec(ctx, command, 0);

  /* コマンド結果の取得 */
  grn_ctx_info info;
  grn_ctx_info_get(ctx, &info);
  printf("%.*s\n", (int)GRN_TEXT_LEN(info.outbuf), GRN_TEXT_VALUE(info.outbuf));

結果

{
  "normalized": "abcde 123",
  "types": [],
  "checks": []
}

tokenize

tokenize コマンドは指定したトークナイザーでテキストをトークナイズします。これはトークナイズ処理のデバッグに便利です。

引数

名前 Offset 概要
tokenizer 0
string 1
normalizer 2
flags 3
mode 4
  /* コマンドを取得 */
  grn_obj *command = grn_ctx_get(ctx, "tokenize", strlen("tokenize"));

  /* 引数を取得して値を設定 */
  grn_obj *tokenizer = grn_expr_get_var(ctx, command, "tokenizer", strlen("tokenizer"));
  grn_obj_reinit(ctx, tokenizer, GRN_DB_TEXT, 0);
  GRN_TEXT_PUTS(ctx, tokenizer, "TokenBigram");

  /* 引数を取得して値を設定 */
  grn_obj *string = grn_expr_get_var(ctx, command, "string", strlen("string"));
  grn_obj_reinit(ctx, string, GRN_DB_TEXT, 0);
  GRN_TEXT_PUTS(ctx, string, "Fulltext Search");

  /* コマンドの実行*/
  grn_expr_exec(ctx, command, 0);

  /* コマンド結果の取得 */
  grn_ctx_info info;
  grn_ctx_info_get(ctx, &info);
  printf("%.*s\n", (int)GRN_TEXT_LEN(info.outbuf), GRN_TEXT_VALUE(info.outbuf));

結果

[
  {
    "value": "Fu",
    "position": 0
  },
  {
    "value": "ul",
    "position": 1
  },
  {
    "value": "ll",
    "position": 2
  },
  {
    "value": "lt",
    "position": 3
  },
  {
    "value": "te",
    "position": 4
  },
  {
    "value": "ex",
    "position": 5
  },
  {
    "value": "xt",
    "position": 6
  },
  {
    "value": "t ",
    "position": 7
  },
  {
    "value": " S",
    "position": 8
  },
  {
    "value": "Se",
    "position": 9
  },
  {
    "value": "ea",
    "position": 10
  },
  {
    "value": "ar",
    "position": 11
  },
  {
    "value": "rc",
    "position": 12
  },
  {
    "value": "ch",
    "position": 13
  },
  {
    "value": "h",
    "position": 14
  }
]

tokenizer_list

tokenizer_list コマンドはデータベースに登録されているトークナイザーの一覧を返します。

引数

なし

  /* コマンドを取得 */
  grn_obj *command = grn_ctx_get(ctx, "tokenizer_list", strlen("tokenizer_list"));

  /* コマンドの実行*/
  grn_expr_exec(ctx, command, 0);

  /* コマンド結果の取得 */
  grn_ctx_info info;
  grn_ctx_info_get(ctx, &info);
  printf("%.*s\n", (int)GRN_TEXT_LEN(info.outbuf), GRN_TEXT_VALUE(info.outbuf));

結果

[
  {
    "name": "TokenDelimit"
  },
  {
    "name": "TokenUnigram"
  },
  {
    "name": "TokenBigram"
  },
  {
    "name": "TokenTrigram"
  },
  {
    "name": "TokenBigramSplitSymbol"
  },
  {
    "name": "TokenBigramSplitSymbolAlpha"
  },
  {
    "name": "TokenBigramSplitSymbolAlphaDigit"
  },
  {
    "name": "TokenBigramIgnoreBlank"
  },
  {
    "name": "TokenBigramIgnoreBlankSplitSymbol"
  },
  {
    "name": "TokenBigramIgnoreBlankSplitSymbolAlpha"
  },
  {
    "name": "TokenBigramIgnoreBlankSplitSymbolAlphaDigit"
  },
  {
    "name": "TokenDelimitNull"
  }
]

normalizer_list

normalizer_list コマンドはデータベースに登録されているノーマライザーの一覧を返します。

引数

なし

  /* コマンドを取得 */
  grn_obj *command = grn_ctx_get(ctx, "normalizer_list", strlen("normalizer_list"));

  /* コマンドの実行*/
  grn_expr_exec(ctx, command, 0);

  /* コマンド結果の取得 */
  grn_ctx_info info;
  grn_ctx_info_get(ctx, &info);
  printf("%.*s\n", (int)GRN_TEXT_LEN(info.outbuf), GRN_TEXT_VALUE(info.outbuf));

結果

[
  {
    "name": "NormalizerAuto"
  },
  {
    "name": "NormalizerNFKC51"
  }
]