順次
【美品】マンティス26 ZOZO購入品 FREAK´S MANTIS26>
へ移行します。
昨日はいきなりマルチスレッドとかいい始めてしまいましたがやっぱちゃんと書かないとだめだなと気持ちを改めました…
【お金の無駄遣い!?】食洗機の失敗を防ぐための選び方やデメリットを徹底解説!
http://groonga.org/ja/docs/install.html$ git clone --recursive git@github.com:groonga/groonga.git $ cd groonga $ cmake . $ make && sudo make install
installしたくない場合はmake installは不要
新発売のスリム食洗機買っ#Panasonic #食洗機
ちょっとよくわかってないんだが、groongaへのアクセス方法は3つある
- 美品✨Dior iPhone11proケース カナージュ ロゴチャーム 黒>から使う
- httpサーバーを立ち上げてWebブラウザからアクセスする
- Memcached binaryプロトコルから使用する
- 除菌消臭剤エアクリーンボトル&詰替セット2セット>からGQTPを介して使う
デフォルトではGQTPが使われるらしい。このGQTPはマルチスレッド対応しており(HTTPとかもしてるけど)、特に指定しなくてもマルチスレッドで使用できる。なおサーバーを特に起動させず大分 むぎ焼酎 二階堂 吉四六 720ml×5本>で使用する場合もマルチスレッドで動くので、DBをopenしたらJ&M DAIBIDSON L字ファスナー長財布 レッド 未使用>サーバーが立ち上がってるんじゃないかな?よくわかんないけど。
HTTPはポートがデフォルトだと10041みたいなので自分で適当なポートを設定したい時は
$ groonga -p 8085 --protocol http -d /tmp/test.db
などとする。 -dオプションはデーモン化するやつ。
【食洗機改善】これだけでストレスフリー!給水ホース/カゴ改造/小物用カゴ/脱スポンジ
DBはファイルベースになっている。簡単なのはコマンドから作るやつ
$ groonga -n /tmp/test.db
デフォルトだと/var/lib/groonga/db/に作られる…のかな?サーバー立ち上げると特に指定しない場合はそこにできるみたい。
Cのルネ ベロアパーカー>から作る場合は下記の通り。 ただし全文検索用インデックスはカラムに対して紐付けを行うので、テーブルを作成する時はnormalizer_typeとtoken_bigramだけをしていしておけばよい。
最新バージョン ドクターシーラボ マチュアリフト トリプルフラーレン 2個>で作る時は bool create_grn_table(grn_ctx* ctx, char *_name, char *_flags, char *_key_type, char *_norm, char *_token) grn_obj *command, *name, *type, *flag, *norm, *token; char* result; uint32_t result_length; int32_t recv_flags; //grn_ctx_getで存在しない名前を指定した場合はNULLがかえる。これを利用して存在チェックする if(!grn_ctx_get(ctx, _name, strlen(_name)) { command = grn_ctx_get(ctx, "table_create", strlen("table_create")); name = grn_expr_get_var(ctx, command, "name", strlen("name")); flag = grn_expr_get_var(ctx, command, "flags", strlen("flags")); type = grn_expr_get_var(ctx, command, "key_type", strlen("key_type")); norm = grn_expr_get_var(ctx, command, "normalizer", strlen("normalizer")); token = grn_expr_get_var(ctx, command, "default_tokenizer", strlen("default_tokenizer")); grn_obj_reinit(ctx, name, GRN_DB_TEXT, 0); grn_obj_reinit(ctx, flag, GRN_DB_TEXT, 0); grn_obj_reinit(ctx, type, GRN_DB_TEXT, 0); grn_obj_reinit(ctx, norm, GRN_DB_TEXT, 0); grn_obj_reinit(ctx, token, GRN_DB_TEXT, 0); GRN_TEXT_PUTS(ctx, name, _table_name); GRN_TEXT_PUTS(ctx, type, _key_type); GRN_TEXT_PUTS(ctx, flag, _flags); GRN_TEXT_PUTS(ctx, norm, _normalizer); GRN_TEXT_PUTS(ctx, token, _tokenizer); grn_expr_exec(ctx, command, 0); grn_ctx_recv(ctx, &result, &result_length, &recv_flags); grn_expr_clear_vars(ctx, command); //unlinkでメモリから解放しておかないとメモリーリークが発生する。 //再帰的に開放されるのでgrn_ctx_getで取ってきたオブジェクトだけで良いみたい grn_obj_unlink(ctx, command); return memcmp(result, "true", result_length) == 0; } return true; int main(void) grn_ctx ctx; grn_obj* db; grn_init(); grn_ctx_init(&ctx, 0); //オープンする。なかったら作る GRN_DB_OPEN_OR_CREATE(&ctx, path, 0, db); //確実にある場合はオープンするだけでもよい //db = grn_db_open(&ctx, path); //create table create_grn_table(&ctx, "main_table", "TABLE_HASH_KEY", "UInt32", "", ""); create_grn_table(&ctx, "index_name", "TABLE_PAT_KEY", "ShortText", "NormalizerAuto", "TokenBigram"); grn_obj_close(&ctx, db); grn_ctx_fin(&ctx); return 0;
この時点ではテーブルには_idと_keyがある(かくれて_scoreとかもあるが)。まだインデックステーブルとテーブルの関係性はできていないので次はカラムをつくる
なお、grn_table_createというORIGIN EFFECTS Cali76-CB compact bass>もあるのでこっちを使っても良い。が、noramlizerオプションとかdefault tokenをどうやって指定するのかよくわからない
【家電王】狭いキッチン対応!約4人分の食器が洗えるスリム食洗機。タンク式もあります
基本的にはスカラー型でつくるのだが、インデックスの場合だけは指定する型が違う。あと関連をもたせたりとかもしないといけない。実はカラムってのが重要なんじゃないか?
まずはメインテーブルにname, valueのカラムを追加する
> column_create --table "main_table" --name "name" --flags "COLUMN_SCALAR" --type "ShortText" > column_create --table "main_table" --name "value" --flags "COLUMN_SCALAR" --type "UInt32"
インデックステーブルにカラムを追加する
main_tableのnameは文字列なので全部検索のためにインデックスを作成してる。bool create_grn_table(char *_name, char *_flags, char *_key_type, char *_norm, char *_token) (省略) bool create_grn_column(grn_ctx* ctx, char* _table, char* _column, char* _flags, char* _type, char* _sources) grn_obj *command, *table, *name, *flag, *type, *source; char* result; uint32_t result_length; int32_t recv_flags; if(!grn_ctx_get(ctx, _column, strlen(_column)) { command = grn_ctx_get(ctx, "column_create", strlen("column_create")); table = grn_expr_get_var(ctx, command, "table", strlen("table")); name = grn_expr_get_var(ctx, command, "name", strlen("name")); flag = grn_expr_get_var(ctx, command, "flags", strlen("flags")); type = grn_expr_get_var(ctx, command, "type", strlen("type")); source = grn_expr_get_var(ctx, command, "source", strlen("source")); grn_obj_reinit(ctx, table, GRN_DB_TEXT, 0); grn_obj_reinit(ctx, name, GRN_DB_TEXT, 0); grn_obj_reinit(ctx, flag, GRN_DB_TEXT, 0); grn_obj_reinit(ctx, type, GRN_DB_TEXT, 0); grn_obj_reinit(ctx, source, GRN_DB_TEXT, 0); GRN_TEXT_PUTS(ctx, table, _table); GRN_TEXT_PUTS(ctx, name, _column); GRN_TEXT_PUTS(ctx, flag, _flags); GRN_TEXT_PUTS(ctx, type, _type); GRN_TEXT_PUTS(ctx, source, _sources); grn_expr_exec(ctx, command, 0); grn_ctx_recv(ctx, &result, &result_length, &recv_flags); grn_expr_clear_vars(ctx, command); grn_obj_unlink(ctx, command); return memcmp(result, "true", result_length) == 0; } return true; int main(void) grn_ctx ctx; grn_obj* db; grn_init(); grn_ctx_init(&ctx, 0); //オープンする。なかったら作る GRN_DB_OPEN_OR_CREATE(&ctx, path, 0, db); //確実にある場合はオープンするだけでもよい //db = grn_db_open(&ctx, path); //create table create_grn_table(&ctx, "main_table", "TABLE_HASH_KEY", "UInt32", "", ""); create_grn_table(&ctx, "index_name", "TABLE_PAT_KEY", "ShortText", "NormalizerAuto", "TokenBigram"); //create column create_grn_column(&ctx, "main_table", "name", "COLUMN_SCALAR", "ShortText", ""); create_grn_column(&ctx, "main_table", "value", "COLUMN_SCALAR", "UInt32", ""); create_grn_column(&ctx, "index_name", "index_name_col", "COLUMN_INDEX|WITH_POSITION", "main_table", "name"); grn_obj_close(&ctx, db); grn_ctx_fin(&ctx); return 0;
こっちもgrn_column_createというGLC 純正フロントグリル>がある。ただしsourceの指定はどうやってするのかよくわからない。typeは指定できるんだが、、、