LoginSignup
4
5

More than 5 years have passed since last update.

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

Last updated at Posted at 2014-10-24

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"
  }
]
4
5
2

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
4
5