rabbit-slide-kou-groonga-meatup-2017 2017.2.9.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 581d3a5d044926228f943a90b3ea543728ec0697
4
+ data.tar.gz: 61222260cdda0b8ad3d9a5d4c192bcd27789bdef
5
+ SHA512:
6
+ metadata.gz: 0711ccaed7e41412c90bb30bd4b9f5db4b8f941a076e25c687c06dc62ae62090b571702746b054141016bee149f851612287cc404d116b2e1ca79a1a2874f631
7
+ data.tar.gz: 06de4a3851a15f00162b6d5f21aeefaad085ba36921ce78a8ffd507ac9743b3af0a7738bc764b9d0518fe10e675667ce936f9de860fc6183f8d3f6089e906748
data/.rabbit ADDED
@@ -0,0 +1 @@
1
+ groonga-family-2016.rab
data/README.rd ADDED
@@ -0,0 +1,59 @@
1
+ = Groonga族2016
2
+
3
+ Groonga、Mroonga、PGroongaなど、Groonga関連プロジェクトの概要と2016年現在の最新情報を紹介します。
4
+
5
+ == ライセンス
6
+
7
+ === スライド
8
+
9
+ CC BY-SA 4.0
10
+
11
+ 原著作者名は以下の通りです。
12
+
13
+ * 須藤功平(またはKouhei Sutou)
14
+
15
+ === 画像
16
+
17
+ ==== 各種Groonga関連プロダクトのロゴ
18
+
19
+ CC BY 3.0
20
+
21
+ 原著作者名は以下の通りです。
22
+
23
+ * Groongaプロジェクト
24
+
25
+ ==== スライスの画像
26
+
27
+ images/OLAP_slicing.png
28
+
29
+ CC BY-SA 3.0
30
+
31
+ 原著作者名は以下の通りです。
32
+
33
+ * Infopedian
34
+
35
+ 関連リンクは以下の通りです。
36
+
37
+ * ((<WikipediaのOLAP cubeのページ|URL:https://en.wikipedia.org/wiki/OLAP_cube>))
38
+ * ((<画像の詳細情報のページ|URL:https://commons.wikimedia.org/wiki/File:OLAP_slicing.png>))
39
+
40
+ == 作者向け
41
+
42
+ === 表示
43
+
44
+ rake
45
+
46
+ === 公開
47
+
48
+ rake publish
49
+
50
+ == 閲覧者向け
51
+
52
+ === インストール
53
+
54
+ gem install rabbit-slide-kou-groonga-meatup-2017
55
+
56
+ === 表示
57
+
58
+ rabbit rabbit-slide-kou-groonga-meatup-2017.gem
59
+
data/Rakefile ADDED
@@ -0,0 +1,18 @@
1
+ require "rabbit/task/slide"
2
+
3
+ # Edit ./config.yaml to customize meta data
4
+
5
+ spec = nil
6
+ Rabbit::Task::Slide.new do |task|
7
+ spec = task.spec
8
+ spec.files += Dir.glob("images/*.*")
9
+ spec.files += Dir.glob("samples/*")
10
+ # spec.files -= Dir.glob("private/**/*.*")
11
+ spec.add_runtime_dependency("rabbit-theme-groonga")
12
+ end
13
+
14
+ desc "Tag #{spec.version}"
15
+ task :tag do
16
+ sh("git", "tag", "-a", spec.version.to_s, "-m", "Publish #{spec.version}")
17
+ sh("git", "push", "--tags")
18
+ end
data/config.yaml ADDED
@@ -0,0 +1,26 @@
1
+ ---
2
+ id: groonga-meatup-2017
3
+ base_name: groonga-family-2016
4
+ tags:
5
+ - rabbit
6
+ - groonga
7
+ - mroonga
8
+ - pgroonga
9
+ - full-text-search
10
+ presentation_date: 2017-02-09
11
+ version: 2017.2.9.0
12
+ licenses:
13
+ - CC BY-SA 4.0
14
+ - CC BY 3.0
15
+ slideshare_id: groongafamily2016
16
+ speaker_deck_id:
17
+ ustream_id:
18
+ vimeo_id:
19
+ youtube_id:
20
+ author:
21
+ markup_language: :rd
22
+ name: Kouhei Sutou
23
+ email: kou@clear-code.com
24
+ rubygems_user: kou
25
+ slideshare_user: kou
26
+ speaker_deck_user:
@@ -0,0 +1,1637 @@
1
+ = Groonga族2016
2
+
3
+ : author
4
+ 須藤功平
5
+ : institution
6
+ 株式会社クリアコード
7
+ : content-source
8
+ Groonga Meatup 2017
9
+ : date
10
+ 2017-02-09
11
+ : allotted-time
12
+ 30m
13
+ : theme
14
+ groonga
15
+
16
+ = 2016年の概要
17
+
18
+ * Groongaが凄くよくなった
19
+ * 速くもなったし便利にもなった
20
+ * Mroongaはそこそこ
21
+ * でもGroongaがよくなったので\n
22
+ Mroongaもよくなった
23
+ * PGroongaも凄くよくなった
24
+
25
+ = 最新情報:Groonga
26
+
27
+ # image
28
+ # src = images/groonga-logo.svg
29
+ # relative_width = 100
30
+
31
+ (('tag:center'))
32
+ ぐるんが
33
+
34
+ = Groonga: 1
35
+
36
+ 索引指定の\n
37
+ 等価検索を\n
38
+ サポート
39
+
40
+ = 索引指定
41
+
42
+ column == 29
43
+ # ↑Groongaが適切な索引を選んで使用
44
+ Numbers.index == 29
45
+ # ↑指定した索引で検索
46
+
47
+ = Groonga: 2
48
+
49
+ シーケンシャル\n
50
+ サーチの\n
51
+ パフォーマンス向上\n
52
+ (('note:(索引なしでも速くなる)'))
53
+
54
+ = 向上パターン
55
+
56
+ true
57
+ # ↑定数
58
+ x == 29
59
+ # ↑定数値との二項演算
60
+
61
+ = Groonga: 3
62
+
63
+ (({config_*}))\n
64
+ コマンドを追加
65
+
66
+ = (({config_*}))コマンド
67
+
68
+ (('tag:center'))
69
+ DB全体で使える\n
70
+ キー・バリュー・ストア
71
+
72
+ * (({config_set})):設定
73
+ * (({config_get})):取得
74
+ * (({config_delete})):削除
75
+
76
+ (('tag:center'))
77
+ (('tag:small'))
78
+ ((<"http://groonga.org/ja/docs/reference/configuration.html"|URL:http://groonga.org/ja/docs/reference/configuration.html>))
79
+
80
+ = 用途例
81
+
82
+ * エイリアス情報を格納する\n
83
+ テーブル名の指定
84
+ * プラグインの設定
85
+ * 例:クエリー展開辞書のパス指定
86
+ * 例:ステミングの言語指定
87
+
88
+ = Groonga: 4
89
+
90
+ エイリアス\n
91
+ サポート
92
+
93
+ = エイリアス
94
+
95
+ * 同一テーブル・カラムに\n
96
+ 複数の名前でアクセス
97
+ * 例:tags/TagsどちらでもOK
98
+
99
+ (('tag:center'))
100
+ (('tag:small'))
101
+ ((<"http://groonga.org/ja/docs/reference/alias.html"|URL:http://groonga.org/ja/docs/reference/alias.html>))
102
+
103
+ = 用途例
104
+
105
+ * 既存クライアントを変更せずに\n
106
+ テーブル・カラムの名前を変更
107
+ * 古いテーブルを削除→\n
108
+ 古い名前で新しいテーブルを参照
109
+ * ダウンタイムなしで\n
110
+ カラムの型を変更
111
+ * 変更後にエイリアスを切り替え
112
+
113
+ = 使い方:設定
114
+
115
+ # Aliasesテーブルのキーを別名、
116
+ # real_nameカラムを実名とする
117
+ config_set \
118
+ alias.column \
119
+ Aliases.real_name
120
+
121
+ = 使い方:登録
122
+
123
+ table_create Aliases \
124
+ TABLE_HASH_KEY ShortText
125
+ column_create Aliases real_name \
126
+ COLUMN_SCALAR ShortText
127
+ # Users.ageをUsers.yearsに展開
128
+ load --table Aliases
129
+ [
130
+ {"_key": "Users.age",
131
+ "real_name": "Users.years"}
132
+ ]
133
+
134
+ = エイリアスの解決
135
+
136
+ * 再帰的
137
+ * Users.age→\n
138
+ Users.years→\n
139
+ People.years\n
140
+ もアリ
141
+
142
+ = Groonga: 5
143
+
144
+ (({lock_*}))\n
145
+ コマンドを追加
146
+
147
+ = (({lock_*}))コマンド
148
+
149
+ * (({lock_acquire})):取得
150
+ * (({lock_release})):解放
151
+
152
+ = 用途
153
+
154
+ テスト
155
+
156
+ = Groonga: 6
157
+
158
+ あいまい検索\n
159
+ サポート
160
+
161
+ = あいまい検索
162
+
163
+ * 多少表記が違ってもマッチ
164
+ * 索引を使うので高速
165
+ * @naoa_y作
166
+
167
+ (('tag:center'))
168
+ (('tag:small'))
169
+ ((<"http://blog.createfield.com/entry/2016/02/28/014432"|URL:http://blog.createfield.com/entry/2016/02/28/014432>))
170
+
171
+ = 用途例
172
+
173
+ * 名前・住所の検索
174
+ * 表記が揺れやすい
175
+ * オートコンプリート
176
+ * ユーザーの入力はミスが多め
177
+
178
+ = 使い方:準備
179
+
180
+ # パトリシアトライなら
181
+ # 索引なしでキーをあいまい検索できる
182
+ table_create Products TABLE_PAT_KEY ShortText
183
+ load --table Products
184
+ [
185
+ {"_key": "Groonga"},
186
+ {"_key": "Grooonga"},
187
+ {"_key": "Mroonga"}
188
+ ]
189
+
190
+ = 使い方:検索
191
+
192
+ select Products \
193
+ --filter 'fuzzy_search(_key, "Groonga")' \
194
+ --output_columns '_key, _score'
195
+ # ... 一致しているほど_scoreが高い ...
196
+ # ["Groonga", 2],
197
+ # ["Grooonga", 1], 多少違ってもヒット
198
+ # ["Mroonga", 1] 多少違ってもヒット
199
+ # ...
200
+
201
+ = Groonga: 7
202
+
203
+ (({object_inspect}))\n
204
+ コマンドを追加
205
+
206
+ = (({object_inspect}))
207
+
208
+ * テーブル・カラムの情報を返す
209
+ * レコード数とか総キーサイズとか
210
+ * 用途:調査
211
+
212
+ (('tag:center'))
213
+ (('tag:small'))
214
+ ((<"http://groonga.org/ja/docs/reference/commands/object_inspect.html"|URL:http://groonga.org/ja/docs/reference/commands/object_inspect.html>))
215
+
216
+ = Groonga: 8
217
+
218
+ ベクターの\n
219
+ 指定位置要素の\n
220
+ 索引検索を\n
221
+ サポート
222
+
223
+ = 例
224
+
225
+ # agesの1番目の要素が29未満ならヒット
226
+ # agesの0番目の要素が29未満でも関係ない
227
+ ages[1] < 29
228
+
229
+ = 使い方:索引
230
+
231
+ table_create Teams TABLE_NO_KEY
232
+ column_create Teams ages \
233
+ COLUMN_VECTOR UInt8
234
+
235
+ table_create Ages TABLE_PAT_KEY
236
+ # 索引にはWITH_POSITIONを指定すること!
237
+ column_create Ages teams_age \
238
+ COLUMN_INDEX|WITH_POSITION Teams age
239
+
240
+ = 使い方:検索
241
+
242
+ load --table Teams
243
+ [
244
+ {"ages": [ 1, 30, 2]},
245
+ {"ages": [30, 28, 29]}
246
+ ]
247
+ select Teams --filter 'ages[1] < 29'
248
+ # "ages": [ 1, 30, 2]はヒットしない
249
+ # "ages": [30, 28, 29]だけヒット
250
+
251
+ = Groonga: 9
252
+
253
+ (({object_remove}))\n
254
+ コマンドを追加
255
+
256
+ = (({object_remove}))
257
+
258
+ * テーブル・カラム…を削除
259
+ * 壊れていても強制削除可!
260
+ * 要注意コマンド
261
+ * 用途:障害対応
262
+
263
+ (('tag:center'))
264
+ (('tag:small'))
265
+ ((<"http://groonga.org/ja/docs/reference/commands/object_remove.html"|URL:http://groonga.org/ja/docs/reference/commands/object_remove.html>))
266
+
267
+ = Groonga: 10
268
+
269
+ クエリー最適化
270
+
271
+ = AND+非等価→AND NOT+等価
272
+
273
+ # 最適化前(索引を使えない)
274
+ XXX && column != xxx
275
+ # 最適化後(索引を使える)
276
+ XXX &! column == xxx
277
+
278
+ = Groonga: 11
279
+
280
+ Memcached\n
281
+ プロトコルでの\n
282
+ カラム値の\n
283
+ 取得・更新を\n
284
+ サポート
285
+
286
+ = 使い方:スキーマ
287
+
288
+ # テーブルのキーはShortText
289
+ table_create Memos \
290
+ TABLE_HASH_KEY ShortText
291
+ # カラムはスカラーでText
292
+ # (ShortText/LongTextも可)
293
+ column_create Memos content \
294
+ COLUMN_SCALAR Text
295
+
296
+ = 使い方:サーバー
297
+
298
+ # Memcachedプロトコルで
299
+ # Memos.contentにアクセス
300
+ % groonga \
301
+ --protocol memcached \
302
+ --port 11211 \
303
+ --memcached-column Memos.content \
304
+ -s db
305
+
306
+ = 使い方:クライアント
307
+
308
+ # coderay python
309
+ import bmemcached
310
+ servers = ("127.0.0.1:11211",)
311
+ client = bmemcached.Client(servers)
312
+ print(client.get("abc")) # None
313
+ client.set("abc", "Hello")
314
+ print(client.get("abc")) # "Hello"
315
+
316
+ = 使い方:確認
317
+
318
+ % groonga db select Memos
319
+ # {"_key": "abc", # キー
320
+ # "content": "Hello", # バリュー
321
+ # ...他にいくつかメタデータ...}
322
+
323
+ = 用途例
324
+
325
+ * 永続化対応キーバリューストア
326
+ * 頻繁な参照・更新処理の高速化
327
+ * HTTPより速い
328
+ * 索引は更新される\n
329
+ →更新したデータはHTTPで全文検索
330
+
331
+ = 参考:hog
332
+
333
+ * GroongaベースのKVS\n
334
+ by @takiuchi
335
+ * 既存DBのカラムを読み書き
336
+ * --protocol memcachedと同様
337
+ * ↑より軽そうで機能が多い
338
+ * 独自プロトコル
339
+
340
+ (('tag:center'))
341
+ (('tag:small'))
342
+ ((<"https://github.com/genki/hog"|URL:https://github.com/genki/hog>))
343
+
344
+ = Groonga: 12
345
+
346
+ ハッシュ\n
347
+ テーブルの\n
348
+ 最大\n
349
+ 総キーサイズUP\n
350
+ 4GiB→1TiB
351
+
352
+ = 使い方
353
+
354
+ # _
355
+ # デフォルトは4GiBのまま
356
+ # KEY_LARGE指定で1TiBに
357
+ table_create \
358
+ --name Large \
359
+ --flags TABLE_HASH_KEY|KEY_LARGE \
360
+ --key_type ShortText
361
+
362
+ = Groonga: 13
363
+
364
+ 即\n
365
+ シャットダウン\n
366
+ 機能
367
+
368
+ = 使い方
369
+
370
+ # _
371
+ # デフォルトは処理中の接続が
372
+ # 終わってからシャットダウン
373
+ # immediate:処理中の接続が
374
+ # あってもすぐにシャットダウン
375
+ shutdown --mode immediate
376
+
377
+ = 用途例
378
+
379
+ * Windowsシャットダウン時
380
+ * 指定時間内に終了しないと強制終了
381
+ * 強制終了するとDB破損の可能性アリ
382
+ * 強制終了よりimmediateの方がマシ
383
+ * (('note:(Windowsには指定時間を伸ばすAPIアリ)'))
384
+
385
+ = Groonga: 14
386
+
387
+ 依存テーブル\n
388
+ 依存カラムも\n
389
+ 一緒に\n
390
+ テーブル削除
391
+
392
+ = 対象例
393
+
394
+ table_create Numbers \
395
+ TABLE_PAT_KEY Int64
396
+ table_create IDs \
397
+ TABLE_HASH_KEY Numbers
398
+ # ↑IDsはNumbersを参照
399
+ table_remove Numbers
400
+ # ↑Numbersは参照されている→エラー
401
+
402
+ = 使い方
403
+
404
+ # --dependent yesを指定
405
+ # デフォルトはno
406
+ table_remove Numbers \
407
+ --dependent yes
408
+ # IDsも一緒に削除
409
+
410
+ (('tag:center'))
411
+ (('tag:small'))
412
+ ((<"http://groonga.org/ja/docs/reference/commands/table_remove.html"|URL:http://groonga.org/ja/docs/reference/commands/table_remove.html>))
413
+
414
+ = Groonga: 15
415
+
416
+ HTTPでの\n
417
+ タイムアウト\n
418
+ サポート
419
+
420
+ = タイムアウト
421
+
422
+ * タイムアウトなし\n
423
+ →クライアント側で切断
424
+ * 切断後もサーバーのCPUは空かない
425
+ * タイムアウトあり\n
426
+ →サーバー側で中断
427
+ * サーバーのCPUが空く
428
+
429
+ = 使い方
430
+
431
+ # 2.9秒で完了しなかったら
432
+ # 408 Request Timeoutを返す
433
+ /d/select.json?...&
434
+ request_timeout=2.9
435
+
436
+ (('tag:center'))
437
+ (('tag:small'))
438
+ ((<"http://groonga.org/ja/docs/reference/command/request_timeout.html"|URL:http://groonga.org/ja/docs/reference/command/request_timeout.html>))
439
+
440
+ = Groonga: 16
441
+
442
+ 多段\n
443
+ ドリルダウン\n
444
+ サポート
445
+
446
+ = 多段ドリルダウン
447
+
448
+ * ドリルダウン結果を\n
449
+ ドリルダウン
450
+ * 利用例:大中小分類それぞれのヒット件数を1リクエストで集計
451
+ * データを正規化できる
452
+ * データの更新に強い
453
+ * @naoa_y作
454
+
455
+ = イメージ
456
+
457
+ # image
458
+ # src = images/multistage-drilldowns.svg
459
+ # relative_width = 100
460
+
461
+ = 使い方
462
+
463
+ select Items \
464
+ --drilldowns[s].keys category \ # 小分類でドリルダウン
465
+ --drilldowns[s].output_columns _key,medium,_nsubrecs \
466
+ --drilldowns[m].table s \ # 小分類でのドリルダウン結果を
467
+ --drilldowns[m].keys medium \ # 中分類でドリルダウン
468
+ --drilldowns[m].calc_target _nsubrecs \
469
+ --drilldowns[m].calc_types SUM \ # 件数(_nsubrecs)を合計
470
+ --drilldowns[m].output_columns _key,large,_sum \
471
+ --drilldowns[l].table m \ # 中分類でのドリルダウン結果を
472
+ --drilldowns[l].keys large \ # 大分類でドリルダウン
473
+ --drilldowns[l].calc_target _sum \
474
+ --drilldowns[l].calc_types SUM \ # 合計(_sum)をさらに合計
475
+ --drilldowns[l].output_columns _key,large,_sum
476
+
477
+ = Groonga: 17
478
+
479
+ ウィンドウ関数\n
480
+ サポート
481
+
482
+ = ウィンドウ関数
483
+
484
+ (1) グループ毎に処理
485
+ * 普通の関数は1レコード毎に処理
486
+ * ドリルダウンは全レコードを処理
487
+ (2) 指定したソート順で処理
488
+
489
+ = 用途例
490
+
491
+ * データ分析
492
+ * 例:
493
+ * 商品毎(商品でグループ化)の\n
494
+ 売上累計(日付でソート)
495
+
496
+ = 商品毎の売上累計
497
+
498
+ # image
499
+ # src = images/window-function.svg
500
+ # relative_height = 100
501
+
502
+ = 使い方
503
+
504
+ select Logs \
505
+ # 商品毎の累計売上はamount一時カラムに入れる
506
+ --columns[amount].stage initial \
507
+ --columns[amount].type UInt32 \
508
+ # window_sum()は累計するウィンドウ関数
509
+ --columns[amount].value 'window_sum(sales)' \
510
+ # 製品でグループ化
511
+ --columns[amount].window.group_keys product \
512
+ # 日付でソートした順に処理
513
+ --columns[amount].window.sort_keys day \
514
+ --output_columns *,amount # 出力
515
+
516
+ = Groonga: 18
517
+
518
+ スライス\n
519
+ サポート
520
+
521
+ = スライス
522
+
523
+ * OLAPの用語\n
524
+ (('note:豆知識:ドリルダウンもOLAPの用語'))
525
+ * 軸を1つ決めて絞り込む
526
+ * 例:\n
527
+ 全期間中今年のログだけに着目
528
+ * 「今年」という軸で絞り込んでいる
529
+
530
+ (('tag:center'))
531
+ (('tag:small'))
532
+ ((<"https://en.wikipedia.org/wiki/OLAP_cube"|URL:https://en.wikipedia.org/wiki/OLAP_cube>))
533
+
534
+ = スライスのイメージ
535
+
536
+ # image
537
+ # src = images/OLAP_slicing.png
538
+ # relative_width = 100
539
+
540
+ (('tag:center'))
541
+ (('tag:x-small'))
542
+ CC BY-SA 3.0 by Infopedian\n
543
+ ((<"https://commons.wikimedia.org/wiki/File:OLAP_slicing.png"|URL:https://commons.wikimedia.org/wiki/File:OLAP_slicing.png>))
544
+
545
+ = 用途例
546
+
547
+ (('tag:center'))
548
+ 1リクエストで\n
549
+ オススメ絞り込み結果も表示
550
+
551
+ # image
552
+ # src = images/slice-example.svg
553
+ # relative_width = 100
554
+
555
+ = 使い方
556
+
557
+ select Works \
558
+ --match_columns description \
559
+ --query Webアプリ \
560
+ # ↑までが通常の検索
561
+ # ↓で追加の絞り込み
562
+ --slices[ruby].filter language:Ruby
563
+
564
+ = Groonga: 20
565
+
566
+ 数値・時間の\n
567
+ 分類関数を\n
568
+ 追加\n
569
+ (('note:(分類関数という言い回しはよくない気がする)'))
570
+
571
+ = 分類関数
572
+
573
+ * 値をグループ化
574
+ * 例:100-199は100、200-299は200
575
+ * 例:2017年1月も2017年2月も2017年
576
+
577
+ = 用途例
578
+
579
+ * 価格帯でのドリルダウン
580
+ * 年や月でのドリルダウン
581
+
582
+ = 使い方
583
+
584
+ select Logs \
585
+ --columns[year].stage filtered \
586
+ --columns[year].type UInt16 \
587
+ --columns[year].flags COLUMN_SCALAR \
588
+ --columns[year].value \
589
+ 'time_classify_year(timestamp)' \
590
+ --output_columns timestamp,year
591
+ # yearカラムに年だけが入っている
592
+
593
+ = Groonga: 21
594
+
595
+ コマンド\n
596
+ バージョン3\n
597
+ 追加
598
+
599
+ = コマンドバージョン3
600
+
601
+ * レスポンスのフォーマット変更
602
+ * 配列→オブジェクト
603
+ * デフォルトは1のまま
604
+
605
+ = 出力例
606
+
607
+ status --command_version 3
608
+ # {
609
+ # "header": {
610
+ # "return_code": 0,
611
+ # "start_time": 1486275098.294436,
612
+ # "elapsed_time": 0.00002,
613
+ # },
614
+ # "body": {
615
+ # "alloc_count": 275,
616
+ # ...
617
+ # }
618
+ # }
619
+
620
+ = Groonga: 22
621
+
622
+ (({query_expand}))\n
623
+ コマンドを追加
624
+
625
+ = (({query_expand}))コマンド
626
+
627
+ * クエリー展開結果を返す
628
+ * 同義語の確認に便利
629
+
630
+ = 使用例:準備
631
+
632
+ table_create Words TABLE_HASH_KEY ShortText
633
+ # 類義語のリスト
634
+ column_create Words synonyms \
635
+ COLUMN_VECTOR ShortText
636
+ # 「焼肉」は「焼き肉」とも書かれる
637
+ load --table Words
638
+ [
639
+ {"_key": "焼肉",
640
+ "synonyms": ["焼肉", "焼き肉"]}
641
+ ]
642
+
643
+ = 使用例:展開
644
+
645
+ query_expand Words.synonyms 焼肉
646
+ # "((焼肉) OR (焼き肉))"
647
+ # ↑「焼肉」で検索すると
648
+ # 「焼肉」と「焼き肉」のORで検索
649
+
650
+ = Groonga: 23
651
+
652
+ デフォルトの\n
653
+ ロック\n
654
+ タイムアウト\n
655
+ 短縮
656
+
657
+ = ロックタイムアウト
658
+
659
+ * ロック獲得を諦めるまでの時間
660
+ * 2.7時間→15分
661
+ * クラッシュによるロック残留に\n
662
+ 気づくまでの時間が短くなった
663
+
664
+ = Groonga: 24
665
+
666
+ テーブルの\n
667
+ 最大レコード数\n
668
+ 更新
669
+
670
+ = 最大レコード数
671
+
672
+ * 従来:2(('sup:28'))-1(約2億7千万件)
673
+ * 新:
674
+ * NO_KEY, PAT_KEY: 約10億件
675
+ * HASH_KEY: 約5億件
676
+ * DAT_KEY: 約2億7千万件
677
+
678
+ = Groonga: 25
679
+
680
+ Zstandard\n
681
+ サポート
682
+
683
+ = Zstandard
684
+
685
+ * 新しい圧縮ライブラリー
686
+ * zlib並の圧縮率
687
+ * zlibの数倍の速度
688
+ * カラム値の圧縮に利用可能
689
+
690
+ = 使い方
691
+
692
+ table_create Memos \
693
+ TABLE_HASH_KEY ShortText
694
+ # COMPRESS_ZSTDを指定するだけ
695
+ column_create Memos content \
696
+ COLUMN_SCALAR|COMPRESS_ZSTD \
697
+ Text
698
+
699
+ = Groonga: 26
700
+
701
+ 選択的\n
702
+ カラム圧縮\n
703
+ サポート
704
+
705
+ = 選択的カラム圧縮
706
+
707
+ * 小さなデータの圧縮は無意味
708
+ * ヘッダーの追加でむしろ大きくなる
709
+ * ムダにリソースを使う
710
+ * ある程度大きなデータだけ圧縮
711
+ * 257バイト以上のデータのみ圧縮
712
+ * →カジュアルに圧縮指定できる!
713
+
714
+ = Groonga: 27
715
+
716
+ (({load}))コマンドが\n
717
+ レコードIDの\n
718
+ 返却を\n
719
+ サポート
720
+
721
+ = (({load}))コマンド
722
+
723
+ * バルクロード用コマンド
724
+ * 何件ロードしたかだけ返す
725
+ * ロードしたレコードのIDは返さない
726
+ * 1件のみロードしたい時に不便
727
+ * 追加したらIDを知りたい!
728
+
729
+ = 使い方
730
+
731
+ # _keyは数値
732
+ table_create Numbers TABLE_HASH_KEY Int32
733
+ # --output_ids yesと--command_version 3の指定が必要!
734
+ load --table Numbers \
735
+ --output_ids yes --command_version 3
736
+ [
737
+ {"_key": 29}, # OK
738
+ {"_key": "Hello"} # NG
739
+ ]
740
+ # "body": {
741
+ # "loaded_ids": [1, 0]
742
+ # }
743
+
744
+ = Groonga: 28
745
+
746
+ (({load}))コマンドが\n
747
+ エラー情報の\n
748
+ 返却を\n
749
+ サポート
750
+
751
+ = (({load}))コマンド
752
+
753
+ * バルクロード用コマンド
754
+ * エラーはログに記録のみ
755
+ * バッチのときは妥当な挙動
756
+ * インタラクティブなとき
757
+ * ログ確認は不便
758
+ * エラーをすぐに確認したい!
759
+
760
+ = 使い方
761
+
762
+ # --output_errors yesと--command_version 3の指定が必要!
763
+ load --table Numbers \
764
+ --output_errors yes --command_version 3
765
+ [
766
+ {"_key": 29}, # OK
767
+ {"_key": "Hello"} # NG
768
+ ]
769
+ # "body": {
770
+ # "errors": [
771
+ # {"return_code": 0, "message": null},
772
+ # {"return_code": -22, "message": "failed to..."}
773
+ # ]
774
+ # }
775
+
776
+ = Groonga: ((*29*))
777
+
778
+ 速くなった!\n
779
+ 検索も!\n
780
+ 更新も!
781
+
782
+ = 高速化
783
+
784
+ * 検索
785
+ * AND検索の高速化 by @naoa_y\n
786
+ (10%-40%高速化)
787
+ * フレーズ検索の高速化 by @naoa_y\n
788
+ (0%-100%高速化)
789
+ * 更新
790
+ * 非自然言語の索引更新性能劣化解消\n
791
+ (分単位→ミリ秒単位)
792
+
793
+ = Groonga: まとめ
794
+
795
+ 便利になって\n
796
+ 速くもなった
797
+
798
+ = 最新情報:Mroonga
799
+
800
+ # image
801
+ # src = images/mroonga-logo.svg
802
+ # relative_width = 100
803
+
804
+ (('tag:center'))
805
+ むるんが
806
+
807
+ == スライドプロパティ
808
+
809
+ : groonga-product
810
+
811
+ mroonga
812
+
813
+ = Mroonga: おしらせ
814
+
815
+ (('tag:center'))
816
+ 初心者向けの電子書籍ができた!
817
+
818
+ ((<"https://grnbook-ja.tumblr.com/"|URL:https://grnbook-ja.tumblr.com/>))\n
819
+ by @KitaitiMakoto
820
+
821
+ = Mroonga: 1
822
+
823
+ (({mroonga_}))\n
824
+ (({normalize}))\n
825
+ UDFを追加\n
826
+ (('note:UDF: User Defined Function'))
827
+
828
+ == スライドプロパティ
829
+
830
+ : groonga-product
831
+
832
+ mroonga
833
+
834
+ = (({mroonga_normalize}))
835
+
836
+ * 正規化した文字列を返す
837
+ * 全文検索索引以外でも使える
838
+
839
+ == スライドプロパティ
840
+
841
+ : groonga-product
842
+
843
+ mroonga
844
+
845
+ = 使い方
846
+
847
+ # coderay sql
848
+ SELECT mroonga_normalize('アバ🍣㌠');
849
+ -- +------------------------------------+
850
+ -- | mroonga_normalize('アバ?㌠') |
851
+ -- +------------------------------------+
852
+ -- | アバ🍣サンチーム |
853
+ -- +------------------------------------+
854
+ -- 半角カタカナ→全角カタカナ(濁点含む)
855
+ -- 絵文字→そのまま
856
+ -- 合成済み文字(?)→展開
857
+
858
+ == スライドプロパティ
859
+
860
+ : groonga-product
861
+
862
+ mroonga
863
+
864
+ = Mroonga: 2
865
+
866
+ (({*SS}))プラグマ追加
867
+
868
+ == スライドプロパティ
869
+
870
+ : groonga-product
871
+
872
+ mroonga
873
+
874
+ = (({*SS}))プラグマ
875
+
876
+ # coderay sql
877
+ SELECT ...
878
+ WHERE
879
+ MATCH (title)
880
+ -- Groongaの検索条件を↓で使える
881
+ AGAINST ('*SS ...'
882
+ IN BOOLEAN MODE);
883
+
884
+ == スライドプロパティ
885
+
886
+ : groonga-product
887
+
888
+ mroonga
889
+
890
+ = Groongaの検索条件
891
+
892
+ * 豊富な検索処理
893
+ * 例:あいまい検索
894
+ * 複数の索引で検索可→速い!
895
+ * MySQLは1つしか使えない
896
+
897
+ (('tag:center'))
898
+ (('tag:small'))
899
+ 書式:((<"http://groonga.org/ja/docs/reference/grn_expr/script_syntax.html"|URL:http://groonga.org/ja/docs/reference/grn_expr/script_syntax.html>))
900
+
901
+ == スライドプロパティ
902
+
903
+ : groonga-product
904
+
905
+ mroonga
906
+
907
+ = Mroonga: 3
908
+
909
+ (({mroonga_}))\n
910
+ (({snippet_html}))\n
911
+ UDFが便利に
912
+
913
+ == スライドプロパティ
914
+
915
+ : groonga-product
916
+
917
+ mroonga
918
+
919
+ = (({mroonga_snippet_html}))
920
+
921
+ # coderay sql
922
+ SELECT
923
+ mroonga_snippet_html(content,
924
+ '+肉 -魚 +野菜' AS query)
925
+ -- クエリーをそのまま指定できる↑
926
+ -- (肉、野菜は対象。魚は非対象。)
927
+ -- 「AS query」がポイント
928
+ ...
929
+ WHERE
930
+ MATCH (content)
931
+ AGAINST ('+肉 -魚 +野菜' IN BOOLEAN MODE);
932
+
933
+ == スライドプロパティ
934
+
935
+ : groonga-product
936
+
937
+ mroonga
938
+
939
+ = Mroonga: 4
940
+
941
+ マルチバイトな\n
942
+ カラム名を\n
943
+ サポート
944
+
945
+ == スライドプロパティ
946
+
947
+ : groonga-product
948
+
949
+ mroonga
950
+
951
+ = 使い方:定義
952
+
953
+ # coderay sql
954
+ CREATE TABLE メモ (
955
+ 内容 text,
956
+ FULLTEXT INDEX (内容)
957
+ ) ENGINE=Mroonga
958
+ DEFAULT CHARSET=utf8mb4;
959
+
960
+ = 使い方:確認
961
+
962
+ # coderay sql
963
+ INSERT INTO メモ
964
+ VALUES ('むるんがは速い!');
965
+ SELECT * FROM メモ WHERE
966
+ MATCH (内容)
967
+ AGAINST ('+速い' IN BOOLEAN MODE);
968
+ -- +--------------------------+
969
+ -- | 内容 |
970
+ -- +--------------------------+
971
+ -- | むるんがは速い! |
972
+ -- +--------------------------+
973
+
974
+ == スライドプロパティ
975
+
976
+ : groonga-product
977
+
978
+ mroonga
979
+
980
+ = Mroonga: 5
981
+
982
+ (({FOREIGN KEY}))制約\n
983
+ サポート
984
+
985
+ == スライドプロパティ
986
+
987
+ : groonga-product
988
+
989
+ mroonga
990
+
991
+ = (({FOREIGN KEY}))制約
992
+
993
+ * (({INSERT}))
994
+ * 存在しない参照の挿入はエラー
995
+ * (({UPDATE}))
996
+ * 被参照レコードの更新はエラー
997
+ * (({DELETE}))
998
+ * 被参照レコードの削除はエラー
999
+
1000
+ == スライドプロパティ
1001
+
1002
+ : groonga-product
1003
+
1004
+ mroonga
1005
+
1006
+ = 使い方:定義
1007
+
1008
+ # coderay sql
1009
+ CREATE TABLE tags (
1010
+ name VARCHAR(128) PRIMARY KEY
1011
+ ) ENGINE=Mroonga
1012
+ DEFAULT CHARSET=utf8mb4;
1013
+ CREATE TABLE memos (
1014
+ tag VARCHAR(128),
1015
+ FOREIGN KEY (tag) REFERENCES tags (name)
1016
+ ) ENGINE=Mroonga
1017
+ DEFAULT CHARSET=utf8mb4;
1018
+
1019
+ = 使い方:(({INSERT}))
1020
+
1021
+ # coderay sql
1022
+ INSERT INTO memos VALUES ('Mroonga');
1023
+ -- ↑はエラー:ERROR 1452 (23000):
1024
+ -- Cannot add or update a child row:
1025
+ -- a foreign key constraint fails
1026
+ -- (foreign record doesn't exist:
1027
+ -- <tag>:<"Mroonga">)
1028
+ INSERT INTO tags VALUES ('Mroonga');
1029
+ INSERT INTO memos VALUES ('Mroonga');
1030
+ -- ↑タグ追加後は成功
1031
+ -- Query OK, 1 row affected (0.00 sec)
1032
+
1033
+ = 使い方:(({UPDATE}))
1034
+
1035
+ # coderay sql
1036
+ UPDATE memos SET tag = 'MySQL';
1037
+ -- ↑はエラー:ERROR 1452 (23000):
1038
+ -- Cannot add or update a child row:
1039
+ -- a foreign key constraint fails
1040
+ -- (foreign record doesn't exist:
1041
+ -- <tag>:<"MySQL">)
1042
+ INSERT INTO tags VALUES ('MySQL');
1043
+ UPDATE memos SET tag = 'MySQL';
1044
+ -- ↑タグ追加後は成功
1045
+ -- Query OK, 1 row affected (0.00 sec)
1046
+
1047
+ = 使い方:(({DELETE}))
1048
+
1049
+ # coderay sql
1050
+ DELETE FROM tags WHERE name = 'MySQL';
1051
+ -- ↑参照されているタグは消せない
1052
+ -- ERROR 1451 (23000):
1053
+ -- Cannot delete or update a parent row:
1054
+ -- a foreign key constraint fails
1055
+ -- (one or more child rows exist in <memos>)
1056
+ DELETE FROM tags WHERE name = 'Mroonga';
1057
+ -- ↑参照されていないタグは消せる
1058
+ -- Query OK, 1 row affected (0.00 sec)
1059
+
1060
+ = Mroonga: 6
1061
+
1062
+ 最新\n
1063
+ MySQL・MariaDB\n
1064
+ サポート
1065
+
1066
+ == スライドプロパティ
1067
+
1068
+ : groonga-product
1069
+
1070
+ mroonga
1071
+
1072
+ = サポートバージョン
1073
+
1074
+ * MySQL: 5.7.17
1075
+ * 8.0.0は未確認
1076
+ * MariaDB: 10.2.3
1077
+
1078
+ == スライドプロパティ
1079
+
1080
+ : groonga-product
1081
+
1082
+ mroonga
1083
+
1084
+ = Mroonga: 7
1085
+
1086
+ マルチカラム\n
1087
+ インデックスの\n
1088
+ 性能劣化解消
1089
+
1090
+ == スライドプロパティ
1091
+
1092
+ : groonga-product
1093
+
1094
+ mroonga
1095
+
1096
+ = 性能劣化
1097
+
1098
+ * マルチカラムインデックス
1099
+ * キー:非自然言語\n
1100
+ →Groongaが苦手なパターンだった
1101
+ * Groonga側の改良で解消
1102
+
1103
+ == スライドプロパティ
1104
+
1105
+ : groonga-product
1106
+
1107
+ mroonga
1108
+
1109
+ = Mroonga: まとめ
1110
+
1111
+ * 便利になった!
1112
+ * 速くもなった!
1113
+ * Groongaが速くなったから
1114
+
1115
+ == スライドプロパティ
1116
+
1117
+ : groonga-product
1118
+
1119
+ mroonga
1120
+
1121
+ = 最新情報:PGroonga
1122
+
1123
+ # image
1124
+ # src = images/pgroonga-logo.svg
1125
+ # relative_width = 100
1126
+
1127
+ (('tag:center'))
1128
+ ぴーじーるんが
1129
+
1130
+ == スライドプロパティ
1131
+
1132
+ : groonga-product
1133
+
1134
+ pgroonga
1135
+
1136
+ = PGroonga: 1
1137
+
1138
+ (({TABLESPACE}))\n
1139
+ サポート
1140
+
1141
+ == スライドプロパティ
1142
+
1143
+ : groonga-product
1144
+
1145
+ pgroonga
1146
+
1147
+ = (({TABLESPACE}))
1148
+
1149
+ * 別のパスにファイルを置く機能
1150
+ * 使用例:索引はSSDに置く
1151
+
1152
+ (('tag:center'))
1153
+ (('tag:small'))
1154
+ ((<"https://www.postgresql.org/docs/current/static/manage-ag-tablespaces.html"|URL:https://www.postgresql.org/docs/current/static/manage-ag-tablespaces.html>))
1155
+
1156
+ == スライドプロパティ
1157
+
1158
+ : groonga-product
1159
+
1160
+ pgroonga
1161
+
1162
+ = 使い方
1163
+
1164
+ # coderay sql
1165
+ -- SSDを使うテーブルスペースを作成
1166
+ CREATE TABLESPACE ssd
1167
+ LOCATION '/ssd/data';
1168
+ CREATE TABLE memos (
1169
+ content text
1170
+ ); -- テーブルはHDDに置く
1171
+ CREATE INDEX content_search
1172
+ ON memos
1173
+ USING pgroonga (content)
1174
+ TABLESPACE ssd; -- 索引はSSDに置く
1175
+
1176
+ == スライドプロパティ
1177
+
1178
+ : groonga-product
1179
+
1180
+ pgroonga
1181
+
1182
+ = PGroonga: 2
1183
+
1184
+ 複合主キー\n
1185
+ サポート
1186
+
1187
+ == スライドプロパティ
1188
+
1189
+ : groonga-product
1190
+
1191
+ pgroonga
1192
+
1193
+ = 複合主キー
1194
+
1195
+ * 複数のカラムで主キーを構成
1196
+ * (({pgroonga.score}))を使うには\n
1197
+ 主キーが必要
1198
+ * 複合主キーでも(({pgroonga.score}))を使えるようになった
1199
+
1200
+ == スライドプロパティ
1201
+
1202
+ : groonga-product
1203
+
1204
+ pgroonga
1205
+
1206
+ = 使い方:複合主キー定義
1207
+
1208
+ # coderay sql
1209
+ CREATE TABLE items (
1210
+ company_id int,
1211
+ product_id int,
1212
+ description text,
1213
+ -- 会社IDと製品IDを合わせて主キー
1214
+ PRIMARY KEY (company_id, product_id)
1215
+ );
1216
+
1217
+ = 使い方:索引定義
1218
+
1219
+ # coderay sql
1220
+ CREATE INDEX description_search
1221
+ ON items
1222
+ -- 複合主キーの全カラムを含める
1223
+ USING pgroonga (company_id,
1224
+ product_id,
1225
+ description);
1226
+
1227
+ = 使い方:検索
1228
+
1229
+ # coderay sql
1230
+ -- 索引を使わないとスコアは常に0になる
1231
+ SET enable_seqscan = 'no';
1232
+ SELECT description, pgroonga.score(items)
1233
+ FROM items
1234
+ WHERE description @@ 'すごい';
1235
+ -- description | score
1236
+ -- -------------+-------
1237
+ -- すごい! | 1 ← 0じゃない!
1238
+ -- (1 row)
1239
+
1240
+ == スライドプロパティ
1241
+
1242
+ : groonga-product
1243
+
1244
+ pgroonga
1245
+
1246
+ = PGroonga: 3
1247
+
1248
+ マルチバイトな\n
1249
+ カラム名を\n
1250
+ サポート
1251
+
1252
+ == スライドプロパティ
1253
+
1254
+ : groonga-product
1255
+
1256
+ pgroonga
1257
+
1258
+ = マルチバイトなカラム名
1259
+
1260
+ * 例:日本語のカラム名
1261
+ * 制限:UTF-8のみサポート
1262
+
1263
+ == スライドプロパティ
1264
+
1265
+ : groonga-product
1266
+
1267
+ pgroonga
1268
+
1269
+ = 使い方
1270
+
1271
+ # coderay sql
1272
+ -- 日本語テーブル名
1273
+ CREATE TABLE メモ (
1274
+ 内容 text -- 日本語カラム名
1275
+ );
1276
+ CREATE INDEX 内容検索
1277
+ ON メモ
1278
+ USING pgroonga (内容);
1279
+
1280
+ == スライドプロパティ
1281
+
1282
+ : groonga-product
1283
+
1284
+ pgroonga
1285
+
1286
+ = PGroonga: 4
1287
+
1288
+ 類似文書検索\n
1289
+ サポート
1290
+
1291
+ == スライドプロパティ
1292
+
1293
+ : groonga-product
1294
+
1295
+ pgroonga
1296
+
1297
+ = 使い方:定義
1298
+
1299
+ # coderay sql
1300
+ CREATE TABLE memos (content text);
1301
+ CREATE INDEX content_search
1302
+ ON memos
1303
+ USING pgroonga (
1304
+ content
1305
+ -- v2オペレータークラスを指定
1306
+ pgroonga.text_full_text_search_ops_v2
1307
+ ) -- 形態素解析ベースのトークナイザーを指定
1308
+ WITH (tokenizer='TokenMecab');
1309
+
1310
+ = 使い方:検索
1311
+
1312
+ # coderay sql
1313
+ INSERT INTO memos VALUES
1314
+ ('全文検索が速い'),
1315
+ ('更新が速い'),
1316
+ ('集計が速い');
1317
+ SELECT * FROM memos
1318
+ -- 類似文書検索用演算子は「&~?」
1319
+ WHERE content &~? '全文検索どう?';
1320
+ -- content
1321
+ -- ----------------
1322
+ -- 全文検索が速い
1323
+ -- (1 row)
1324
+ -- ↑同じ話題。「どう?」は含んでいない。
1325
+
1326
+ == スライドプロパティ
1327
+
1328
+ : groonga-product
1329
+
1330
+ pgroonga
1331
+
1332
+ = PGroonga: 5
1333
+
1334
+ 前方一致検索\n
1335
+ サポート
1336
+
1337
+ == スライドプロパティ
1338
+
1339
+ : groonga-product
1340
+
1341
+ pgroonga
1342
+
1343
+ = 使い方:定義
1344
+
1345
+ # coderay sql
1346
+ -- タグをヨミガナで検索
1347
+ CREATE TABLE tags (reading text);
1348
+ CREATE INDEX reading_search
1349
+ ON tags
1350
+ USING pgroonga (
1351
+ reading
1352
+ -- ↓のオペレータークラスを指定
1353
+ pgroonga.text_term_search_ops_v2
1354
+ );
1355
+
1356
+ == スライドプロパティ
1357
+
1358
+ : groonga-product
1359
+
1360
+ pgroonga
1361
+
1362
+ = 使い方:検索
1363
+
1364
+ # coderay sql
1365
+ INSERT INTO tags VALUES
1366
+ ('ゼンブンケンサク'),
1367
+ ('ゼンポウイッチ'),
1368
+ ('シュウケイ');
1369
+ SELECT * FROM tags
1370
+ -- 前方一致用演算子は「&^」
1371
+ WHERE reading &^ 'ゼン';
1372
+ -- reading
1373
+ -- ------------------
1374
+ -- ゼンブンケンサク
1375
+ -- ゼンポウイッチ
1376
+
1377
+ == スライドプロパティ
1378
+
1379
+ : groonga-product
1380
+
1381
+ pgroonga
1382
+
1383
+ = PGroonga: 6
1384
+
1385
+ 前方一致RK検索\n
1386
+ サポート
1387
+
1388
+ == スライドプロパティ
1389
+
1390
+ : groonga-product
1391
+
1392
+ pgroonga
1393
+
1394
+ = RK:ローマ字・カナ
1395
+
1396
+ * ローマ字(zen)で\n
1397
+ カナ(ゼンブンケンサク)を\n
1398
+ 前方一致検索
1399
+ * = 前方一致RK検索
1400
+ * 用途:入力補完
1401
+
1402
+ = 使い方:検索
1403
+
1404
+ # coderay sql
1405
+ -- データは前方一致検索と同じ
1406
+ SELECT * FROM tags
1407
+ -- 前方一致RK用演算子は「&^~」
1408
+ -- 「ゼン」でも「ぜん」でも同じ結果
1409
+ WHERE reading &^~ 'zen';
1410
+ -- reading
1411
+ -- ------------------
1412
+ -- ゼンブンケンサク
1413
+ -- ゼンポウイッチ
1414
+
1415
+ == スライドプロパティ
1416
+
1417
+ : groonga-product
1418
+
1419
+ pgroonga
1420
+
1421
+ = PGroonga: 7
1422
+
1423
+ (({pgroonga.}))\n
1424
+ (({highlight_html}))追加
1425
+
1426
+ == スライドプロパティ
1427
+
1428
+ : groonga-product
1429
+
1430
+ pgroonga
1431
+
1432
+ = (({pgroonga.highlight_html}))
1433
+
1434
+ * キーワードをハイライト
1435
+ * 用途:検索結果の表示
1436
+
1437
+ = 使い方:基本
1438
+
1439
+ # coderay sql
1440
+ SELECT pgroonga.highlight_html(
1441
+ 'Groongaは速い', -- ハイライト対象
1442
+ ARRAY['Groonga']); -- キーワードは複数指定可
1443
+ -- highlight_html
1444
+ -- --------------------------------------------
1445
+ -- <span class="keyword">Groonga</span>は速い
1446
+ -- (1 row)
1447
+ -- ↑キーワードは<span>で囲まれる。
1448
+
1449
+ == スライドプロパティ
1450
+
1451
+ : groonga-product
1452
+
1453
+ pgroonga
1454
+
1455
+ = 使い方:応用
1456
+
1457
+ # coderay sql
1458
+ SELECT pgroonga.highlight_html(
1459
+ 'Groongaは速い', -- ハイライト対象
1460
+ -- クエリーからキーワードを抽出
1461
+ pgroonga.query_extract_keywords(
1462
+ 'Groonga OR PostgreSQL')
1463
+ );
1464
+ -- highlight_html
1465
+ -- --------------------------------------------
1466
+ -- <span class="keyword">Groonga</span>は速い
1467
+ -- (1 row)
1468
+ -- ↑キーワードは<span>で囲まれる。
1469
+
1470
+ == スライドプロパティ
1471
+
1472
+ : groonga-product
1473
+
1474
+ pgroonga
1475
+
1476
+ = PGroonga: 8
1477
+
1478
+ ヒット件数の\n
1479
+ 見積サポート
1480
+
1481
+ == スライドプロパティ
1482
+
1483
+ : groonga-product
1484
+
1485
+ pgroonga
1486
+
1487
+ = ヒット件数の見積
1488
+
1489
+ * 実行計画決定に利用
1490
+ * 見積精度が上がると\n
1491
+ 適切な計画を選びやすくなる
1492
+ * →速くなる!
1493
+
1494
+ == スライドプロパティ
1495
+
1496
+ : groonga-product
1497
+
1498
+ pgroonga
1499
+
1500
+ = PGroonga: 9
1501
+
1502
+ ストリーミング\n
1503
+ レプリ\n
1504
+ ケーション\n
1505
+ サポート
1506
+
1507
+ == スライドプロパティ
1508
+
1509
+ : groonga-product
1510
+
1511
+ pgroonga
1512
+
1513
+ = レプリケーション
1514
+
1515
+ * リアルタイムでデータコピー
1516
+ * 用途例:検索性能向上
1517
+ * 検索性能が足りない!
1518
+ * →検索専用ノード追加で対応
1519
+
1520
+ (('tag:center'))
1521
+ (('tag:small'))
1522
+ ((<"https://pgroonga.github.io/ja/reference/replication.html"|URL:https://pgroonga.github.io/ja/reference/replication.html>))
1523
+
1524
+ == スライドプロパティ
1525
+
1526
+ : groonga-product
1527
+
1528
+ pgroonga
1529
+
1530
+ = PGroonga: 10
1531
+
1532
+ Zstandard\n
1533
+ サポート
1534
+
1535
+ == スライドプロパティ
1536
+
1537
+ : groonga-product
1538
+
1539
+ pgroonga
1540
+
1541
+ = 使い方
1542
+
1543
+ * ユーザーはなにもしなくてよい
1544
+ * PGroongaが自動で使う
1545
+ * テキストカラムで利用
1546
+
1547
+ == スライドプロパティ
1548
+
1549
+ : groonga-product
1550
+
1551
+ pgroonga
1552
+
1553
+ = PGroonga: 11
1554
+
1555
+ 生Groonga検索\n
1556
+ サポート強化
1557
+
1558
+ == スライドプロパティ
1559
+
1560
+ : groonga-product
1561
+
1562
+ pgroonga
1563
+
1564
+ = 生Groonga検索
1565
+
1566
+ * PostgreSQLを介さずに\n
1567
+ Groongaで検索
1568
+ * (({pgroonga.command}))を使う
1569
+ * 課題:セキュリティー
1570
+ * インジェクション怖い…
1571
+
1572
+ = セキュリティー対策
1573
+
1574
+ 自動エスケープ
1575
+
1576
+ = 使い方
1577
+
1578
+ # coderay sql
1579
+ SELECT pgroonga.command(
1580
+ 'select',
1581
+ ARRAY[ -- 配列で渡すと自動エスケープ
1582
+ 'table', pgroonga.table_name('memos'),
1583
+ -- ..., ↓自動エスケープ
1584
+ 'query', 'ユーザーからの入力'
1585
+ ]);
1586
+
1587
+ == スライドプロパティ
1588
+
1589
+ : groonga-product
1590
+
1591
+ pgroonga
1592
+
1593
+ = PGroonga: まとめ
1594
+
1595
+ * 便利になった!
1596
+ * 速くもなった!
1597
+ * Groongaが速くなったから
1598
+
1599
+ == スライドプロパティ
1600
+
1601
+ : groonga-product
1602
+
1603
+ pgroonga
1604
+
1605
+ = 2016年のまとめ
1606
+
1607
+ * Groongaが凄くよくなった
1608
+ * 速くもなったし便利にもなった
1609
+ * Mroongaの本ができた
1610
+ * ((<"https://grnbook-ja.tumblr.com/"|URL:https://grnbook-ja.tumblr.com/>))\n
1611
+ by @KitaitiMakoto
1612
+ * PGroongaも凄くよくなった
1613
+
1614
+ = 2017年の抱負
1615
+
1616
+ データ分析に\n
1617
+ 活用したい!
1618
+
1619
+ = データ分析に活用?
1620
+
1621
+ * 分析システムの一部でGroonga
1622
+ * 特徴を活かせるのでは!?
1623
+ * Groongaの特徴
1624
+ * リアルタイムな自然言語処理
1625
+ * 高速なフィルター・集計処理
1626
+
1627
+ (('tag:center'))
1628
+ データの前処理・選別にどう?\n
1629
+ (('note:(一緒に活用方法から考えていきたい!)'))
1630
+
1631
+ = データ分析への最初の一歩
1632
+
1633
+ * Cythonでバインディングを開発
1634
+ * Pythonで使えると分析システムで\n
1635
+ 使いやすいかも?
1636
+ * 興味がある人たちで集まる
1637
+ * 手を動かす人たちがよさそう?