rabbit-slide-kou-postgresql-conference-2017 2017.11.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: ae3dd1ce98766c2a8ad92b9020ec87af07a90d5b
4
+ data.tar.gz: 4be91c327ee2448c0cecdf3f26d05b5eef93f4ce
5
+ SHA512:
6
+ metadata.gz: 6b0f81e765db2136dab406c8f973242b3b9e26b96f33a778350147bcc7027564a5189aeb34f9bfd12abada0e4509fae7f8c1cecc4dfcf3b83d5f50eee5538e79
7
+ data.tar.gz: d3dd80003b64e457aa669b20412bd051b5da0cce9d797d853fb64da693b4c25efa6610910e8ba2fb39250416cd9005b052fb8a696ae5ed0bd6ffb48ed21a6832
data/.rabbit ADDED
@@ -0,0 +1 @@
1
+ pgroonga-2.rab
@@ -0,0 +1,24 @@
1
+ = PGroonga 2 - PostgreSQLでの全文検索の決定版
2
+
3
+ PostgreSQLが苦手な全文検索機能を強力に補完する拡張機能PGroongaの最新情報を紹介します。PGroongaは単なる全文検索モジュールではありません。PostgreSQLで簡単にリッチな全文検索システムを実現するための機能一式を提供します。PGroongaは最新PostgreSQLへの対応も積極的です。例としてロジカルレプリケーションと組み合わせた活用方法も紹介します。
4
+
5
+ == 作者向け
6
+
7
+ === 表示
8
+
9
+ rake
10
+
11
+ === 公開
12
+
13
+ rake publish
14
+
15
+ == 閲覧者向け
16
+
17
+ === インストール
18
+
19
+ gem install rabbit-slide-kou-postgresql-conference-2017
20
+
21
+ === 表示
22
+
23
+ rabbit rabbit-slide-kou-postgresql-conference-2017.gem
24
+
@@ -0,0 +1,17 @@
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("doc/**/*.*")
9
+ # spec.files -= Dir.glob("private/**/*.*")
10
+ spec.add_runtime_dependency("rabbit-theme-groonga")
11
+ end
12
+
13
+ desc "Tag #{spec.version}"
14
+ task :tag do
15
+ sh("git", "tag", "-a", spec.version.to_s, "-m", "Publish #{spec.version}")
16
+ sh("git", "push", "--tags")
17
+ end
@@ -0,0 +1,24 @@
1
+ ---
2
+ id: postgresql-conference-2017
3
+ base_name: pgroonga-2
4
+ tags:
5
+ - rabbit
6
+ - postgresql
7
+ - pgroonga
8
+ - pgcon17j
9
+ presentation_date: 2017-11-03
10
+ version: 2017.11.3.0
11
+ licenses:
12
+ - CC-BY-SA-4.0
13
+ slideshare_id:
14
+ speaker_deck_id:
15
+ ustream_id:
16
+ vimeo_id:
17
+ youtube_id:
18
+ author:
19
+ markup_language: :rd
20
+ name: Kouhei Sutou
21
+ email: kou@clear-code.com
22
+ rubygems_user: kou
23
+ slideshare_user: kou
24
+ speaker_deck_user:
Binary file
@@ -0,0 +1,933 @@
1
+ = PGroonga 2
2
+
3
+ : subtitle
4
+ PostgreSQLでの全文検索の決定版
5
+ : author
6
+ 須藤功平
7
+ : institution
8
+ クリアコード
9
+ : content-source
10
+ PostgreSQL Conference Japan 2017
11
+ : date
12
+ 2017-11-03
13
+ : start-time
14
+ 2017-11-03T16:10:00+0900
15
+ : end-time
16
+ 2017-11-03T17:00:00+0900
17
+ : theme
18
+ .
19
+
20
+ # = 対象者
21
+
22
+ # * PostgreSQLで全文検索したい
23
+ # * 全文検索はよく知らない
24
+ # * PGroongaは使ったことがない
25
+
26
+ # = 全文検索システム:対象
27
+
28
+ # (('tag:center'))
29
+ # (('tag:large'))
30
+ # (('tag:margin-bottom * 2'))
31
+ # 大量のテキスト
32
+
33
+ # * 例:Wikiのデータ
34
+ # * 例:オフィス文書のテキスト
35
+ # * 例:商品説明・口コミ
36
+ # * 例:チャットログ
37
+
38
+ # = 全文検索システム:目的
39
+
40
+ # * 必要な情報を
41
+ # * 必要なときに
42
+ # * 活用
43
+
44
+ # = 必要な情報を活用
45
+
46
+ # * ×
47
+ # * 探している情報が見つからない
48
+ # * ○
49
+ # * 探している情報が見つかる
50
+ # * ◎
51
+ # * 意識していなかったけど\n
52
+ # ((*実は欲しかった*))情報も見つかる!
53
+
54
+ # = 必要なときに活用
55
+
56
+ # * ×
57
+ # * なかなか見つからない
58
+ # * ○
59
+ # * すぐに見つかる
60
+ # * ◎
61
+ # * すでに見つかっていた
62
+ # * 例:レコメンデーション
63
+
64
+ # = 実装方法\n選択肢
65
+
66
+ # * 全文検索サーバーを使う
67
+ # * PostgreSQLを使う
68
+
69
+ # = 全文検索サーバー案\nメリット
70
+
71
+ # * 必要な機能が揃っている
72
+ # * +αの機能もある
73
+ # * 速い
74
+
75
+ # = 全文検索サーバー案\nデメリット
76
+
77
+ # * 実装コスト大
78
+ # * それぞれ独自の使い方だから
79
+ # * マスターデータの同期はどうする?
80
+ # * メンテナンスコスト大
81
+ # * それぞれ独自の仕組みだから
82
+
83
+ # = PostgreSQL案\nメリット
84
+
85
+ # * 実装コスト小
86
+ # * 新しく覚えることが少ない
87
+ # * データの一元管理
88
+ # * メンテナンスコスト小
89
+ # * 既存の運用ノウハウを使える
90
+
91
+ # = PostgreSQL案\nデメリット
92
+
93
+ # * 組込機能では機能不足
94
+ # * SQLの表現力不足
95
+ # * 1クエリーで実現できない機能アリ
96
+ # * ↑は性能を出しにくい
97
+
98
+ # = 実現方法\n第3の選択肢
99
+
100
+ # * PostgreSQL経由(SQL)で\n
101
+ # 全文検索エンジンを使う
102
+
103
+ # = メリット
104
+
105
+ # * 高速で豊富な機能
106
+ # * 実装コスト小
107
+ # * メンテナンスコスト小
108
+
109
+ # = デメリット
110
+
111
+ # * PostgreSQLに拡張機能が必要
112
+ # * DBaaSで使えない
113
+
114
+ # = オススメの選択肢\n全文検索の知識ナシ
115
+
116
+ # * まだ単純な機能で十分
117
+ # * データ少:PostgreSQLでLIKE\n
118
+ # (('note:(数十万件とか)'))
119
+ # * いまどきの全文検索機能が必要
120
+ # * PostgreSQL経由で全文検索エンジン
121
+
122
+ # = オススメの選択肢\n全文検索の知識アリ
123
+
124
+ # * カリカリにチューニングしたい
125
+ # * PostgreSQL+全文検索サーバー
126
+ # * それ以外
127
+ # * PostgreSQL経由で全文検索エンジン
128
+
129
+ # = 説明する選択肢
130
+
131
+ # PostgreSQL経由で\n
132
+ # 全文検索\n
133
+ # エンジン
134
+
135
+ # = 全文検索エンジン\nGroonga(ぐるんが)
136
+
137
+ # * 組込可能な全文検索エンジン
138
+ # * PostgreSQLに組込→PGoonga
139
+ # * 全文検索サーバーとして\n
140
+ # 単独でも使用可能
141
+ # * PostgreSQL+全文検索サーバー構成\n
142
+ # もできる
143
+
144
+ # = Groongaの得意なこと\nデータの追加・更新
145
+
146
+ # * 新鮮な情報がすぐ検索可能!
147
+ # * バッチで更新しなくてもよい
148
+ # * チャットくらいの頻度でもOK\n
149
+ # 例:ZulipはPGroongaを採用
150
+ # * 更新中も検索性能が落ちない!
151
+ # * 利用ユーザーが多い時でも更新可能
152
+
153
+ # = Groongaの得意なこと\n日本語まわり
154
+
155
+ # * 開発者が日本人
156
+ # * 便利機能が組み込み
157
+
158
+ # (('tag:center'))
159
+ # (('tag:margin-top * 3'))
160
+ # (('note:もちろん、日本語以外もOK!'))
161
+
162
+ # = PGroonga\n(ぴーじーるんが)
163
+
164
+ # * PostgreSQLのインデックス
165
+ # * B-tree・GINなどと同じレイヤー
166
+ # * 使用方法
167
+ # * (({CREATE INDEX ...}))\n
168
+ # (({USING PGroonga ...}))
169
+
170
+ # = PostgreSQLと全文検索
171
+
172
+ # * LIKE:組込機能
173
+ # * textsearch:組込機能
174
+ # * pg_trgm:標準添付
175
+ # * アーカイブには含まれている
176
+ # * 別途インストールすれば使える
177
+
178
+ # = LIKEと速度
179
+
180
+ # * 少ないデータ
181
+ # * 十分実用的
182
+ # * 400文字×20万件くらいなら1秒とか
183
+ # * 少なくないデータ
184
+ # * 性能問題アリ
185
+
186
+ # = LIKEと全文検索システム
187
+
188
+ # * 👍速度が実用的なことも多い
189
+ # * 少ないデータなら
190
+ # * 👎それっぽい順のソート不可
191
+ # * 全文検索ではソート順が重要
192
+ # * ユーザーは先頭n件しか見ない
193
+
194
+ # = textsearch
195
+
196
+ # * インデックスを作るので速い
197
+ # * 言語毎にモジュールが必要
198
+ # * 英語やフランス語などは組込
199
+ # * 日本語は別途必要
200
+ # * 日本語用モジュールはあるが…
201
+ # * 公式にはメンテナンスされていない\n
202
+ # (('note:forkして動くようにしている人はいる'))
203
+
204
+ # = pg_trgm
205
+
206
+ # * インデックスを作るので速い
207
+ # * 注:ヒット件数が増えると遅い
208
+ # * 注:テキスト量が多いと遅い
209
+ # * 注:1,2文字の検索は遅い(('note:(米・日本)'))
210
+
211
+ # * 日本語を使うにはひと工夫必要
212
+ # * C.UTF-8を使う
213
+ # * ソースを変更してビルド
214
+
215
+ # = プラグイン
216
+
217
+ # * pg_bigm
218
+ # * pg_trgmの日本語対応強化版
219
+ # * それっぽい順のソート不可
220
+ # * PGroonga
221
+ # * 本気の全文検索エンジンを利用
222
+ # * 速いし日本語もバッチリ!
223
+ # * それっぽい順のソート可
224
+
225
+ # = ベンチマーク:pg_bigm
226
+
227
+ # # image
228
+ # # src = images/search-pg-bigm.pdf
229
+ # # relative_height = 100
230
+
231
+ # = ベンチマーク:PGroonga
232
+
233
+ # # image
234
+ # # src = images/search-pgroonga-pg-bigm.pdf
235
+ # # relative_height = 100
236
+
237
+ # = PostgreSQLで全文検索システム
238
+
239
+ # * PostgreSQLで全文検索
240
+ # * PGroongaがベスト!💯
241
+ # * PGroonga
242
+ # * 高速
243
+ # * 日本語対応
244
+ # * それっぽい順でソート可
245
+
246
+ # = 基本機能
247
+
248
+ # * 高速全文検索+ソート
249
+ # * 検索キーワードハイライト
250
+ # * キーワード周辺テキスト表示
251
+
252
+ # = 高度な機能
253
+
254
+ # * オートコンプリート
255
+ # * ローマ字対応(zen→全文検索)
256
+ # * 類似文書検索
257
+ # * 同義語展開
258
+ # * 「牛乳」→\n
259
+ # 「牛乳 OR ミルク」
260
+
261
+ # = 高速全文検索+ソート
262
+
263
+ # # image
264
+ # # src = images/php-document-search-search.png
265
+ # # relative_height = 100
266
+
267
+ # = テーブル定義
268
+
269
+ # # coderay sql
270
+
271
+ # CREATE TABLE entries (
272
+ # -- 主キーを用意する
273
+ # -- それっぽい順でソートするために必要
274
+ # id integer PRIMARY KEY,
275
+ # title text,
276
+ # content text
277
+ # );
278
+
279
+ # = インデックス定義
280
+
281
+ # # coderay sql
282
+
283
+ # -- 全文検索用インデックス
284
+ # -- よくわからないなら
285
+ # -- デフォルトのまま使うこと!
286
+ # CREATE INDEX entries_full_text_search
287
+ # ON entries
288
+ # --「USING PGroonga」=「PGroongaを使う」
289
+ # -- 主キーはそれっぽい順ソートのため!
290
+ # USING PGroonga (id, title, content);
291
+
292
+ # = データ挿入
293
+
294
+ # # coderay sql
295
+
296
+ # -- 普通に挿入するだけでよい
297
+ # INSERT INTO entries
298
+ # VALUES (1,
299
+ # 'Groongaで高速全文検索!',
300
+ # '高速に全文検索したいですね!');
301
+
302
+ # = 全文検索
303
+
304
+ # # coderay sql
305
+
306
+ # SELECT title FROM entries
307
+ # WHERE
308
+ # -- &@~で全文検索
309
+ # -- 「検索」と「高速」をAND検索
310
+ # title &@~ '検索 高速' OR
311
+ # content &@~ '検索 高速';
312
+
313
+ # = 全文検索:LIKE
314
+
315
+ # # coderay sql
316
+
317
+ # SELECT title FROM entries
318
+ # WHERE
319
+ # -- LIKEでもインデックスが効く
320
+ # --=アプリを書き換えずに高速化可能
321
+ # -- ただし&@~より性能が落ちる
322
+ # title LIKE '%検索%' OR
323
+ # content LIKE '%検索%';
324
+
325
+ # = それっぽい順のソート
326
+
327
+ # # coderay sql
328
+
329
+ # SELECT
330
+ # title,
331
+ # -- pgroonga_score(テーブル名)で
332
+ # -- それっぽさを数値で取得
333
+ # pgroonga_score(entries) AS score
334
+ # FROM entries
335
+ # WHERE -- ...
336
+ # -- それっぽさでソート
337
+ # ORDER BY score DESC LIMIT 10;
338
+
339
+ # = キーワードハイライト
340
+
341
+ # # image
342
+ # # src = images/php-document-search-search.png
343
+ # # relative_height = 100
344
+
345
+ # = HTML用にハイライト
346
+
347
+ # # coderay sql
348
+
349
+ # SELECT
350
+ # pgroonga_highlight_html(
351
+ # title,
352
+ # -- クエリーから対象キーワードを抽出
353
+ # pgroonga_query_extract_keywords('検索 高速'))
354
+ # FROM entries
355
+ # WHERE title &@~ '検索 高速' OR
356
+ # content &@~ '検索 高速';
357
+
358
+ # = HTML用ハイライト結果例
359
+
360
+ # # coderay html
361
+
362
+ # <Groonga>で高速全文検索!
363
+ # ↓
364
+ # &lt;Groonga&gt;で ← タグをエスケープ
365
+ # <span class="keyword">高速</span>
366
+ # 全文 ↑↓キーワードはclass付け
367
+ # <span class="keyword">検索</span>!
368
+
369
+ # = 周辺テキスト
370
+
371
+ # # image
372
+ # # src = images/php-document-search-search.png
373
+ # # relative_height = 100
374
+
375
+ # = HTML用に周辺テキスト取得
376
+
377
+ # # coderay sql
378
+
379
+ # SELECT
380
+ # pgroonga_snippet_html(
381
+ # content,
382
+ # -- クエリーから対象キーワードを抽出
383
+ # pgroonga_query_extract_keywords('検索 高速'))
384
+ # FROM entries
385
+ # WHERE title &@~ '検索 高速' OR
386
+ # content &@~ '検索 高速';
387
+
388
+ # = HTML用周辺テキスト結果例
389
+
390
+ # # coderay html
391
+
392
+ # ...<Groonga>で高速全文検索!...
393
+ # ↓
394
+ # ARRAY[
395
+ # ↓ 1つ目
396
+ # 'ga&gt;で ←タグをエスケープ
397
+ # <span class="keyword">高速</span>
398
+ # 全文 ↑↓キーワードはclass付け
399
+ # <span class="keyword">検索/span>!',
400
+ # '...' ← 2つ目
401
+ # ]
402
+
403
+ # = オートコンプリート
404
+
405
+ # # image
406
+ # # src = images/php-document-search.png
407
+ # # relative_height = 100
408
+
409
+ # = オートコンプリート:必要なもの
410
+
411
+ # * マスターテーブル
412
+ # * 候補(例:牛乳)
413
+ # * 候補のヨミ(カタカナ・複数可)
414
+ # * 例1:ギュウニュウ
415
+ # * 例2:ミルク
416
+
417
+ # = オートコンプリート:実装方法
418
+
419
+ # * 以下の検索のOR
420
+ # * ヨミでの前方一致検索
421
+ # * 候補を緩い全文検索
422
+ # * 候補でソートして提示
423
+
424
+ # (('tag:xx-small'))
425
+ # ((<"https://pgroonga.github.io/ja/how-to/auto-complete.html"|URL:https://pgroonga.github.io/ja/how-to/auto-complete.html>))
426
+
427
+ # = オートコンプリート\nテーブル定義
428
+
429
+ # # coderay sql
430
+
431
+ # CREATE TABLE terms (
432
+ # -- 補完候補
433
+ # term text,
434
+ # -- この候補のヨミ(N個可)
435
+ # readings text[],
436
+ # );
437
+
438
+ # = オートコンプリート:データ例
439
+
440
+ # # coderay sql
441
+
442
+ # INSERT INTO terms VALUES (
443
+ # '牛乳', -- 補完候補
444
+ # ARRAY[
445
+ # -- ヨミはカタカナで指定
446
+ # 'ギュウニュウ',
447
+ # -- 「ミルク」でも補完可
448
+ # 'ミルク'
449
+ # ]
450
+ # );
451
+
452
+ # = オートコンプリート\nデータ管理のポイント
453
+
454
+ # * 普通のテーブルなので管理が楽
455
+ # * 追加・削除・更新が楽
456
+ # * ダンプ・リストアもいつも通り
457
+ # * レプリケーションもいつも通り
458
+
459
+ # = オートコンプリート\n前方一致用インデックス
460
+
461
+ # # coderay sql
462
+
463
+ # CREATE INDEX prefix_search ON terms
464
+ # USING PGroonga
465
+ # -- ...text_array_term_search...
466
+ # (readings pgroonga_text_array_term_search_ops_v2);
467
+
468
+ # = オートコンプリート\n緩い全文検索用
469
+
470
+ # # coderay sql
471
+
472
+ # CREATE INDEX loose_search ON terms
473
+ # USING PGroonga (term)
474
+ # -- 緩い全文検索用トークナイザー
475
+ # WITH (tokenizer='TokenBigramSplitSymbolAlphaDigit');
476
+
477
+ # = オートコンプリート\n検索方法
478
+
479
+ # # coderay sql
480
+
481
+ # SELECT term FROM terms
482
+ # -- ヨミで前方一致検索
483
+ # WHERE readings &^~ '${入力}' OR
484
+ # -- 緩い全文検索
485
+ # term &@ '${入力}'
486
+ # ORDER BY term LIMIT 10; -- ソート
487
+
488
+ # = オートコンプリート\n検索例:漢字1
489
+
490
+ # # coderay sql
491
+
492
+ # -- ユーザーが「牛」を入力した場合
493
+ # SELECT term FROM terms
494
+ # -- ヨミで前方一致検索
495
+ # WHERE readings &^~ '牛' OR
496
+ # -- 緩い全文検索(ヒット)
497
+ # term &@ '牛'
498
+ # ORDER BY term LIMIT 10; -- ソート
499
+
500
+ # = オートコンプリート\n検索例:漢字2
501
+
502
+ # # coderay sql
503
+
504
+ # -- ユーザーが「乳」を入力した場合
505
+ # SELECT term FROM terms
506
+ # -- ヨミで前方一致検索
507
+ # WHERE readings &^~ '乳' OR
508
+ # -- 緩い全文検索(ヒット)
509
+ # term &@ '乳'
510
+ # ORDER BY term LIMIT 10; -- ソート
511
+
512
+ # = オートコンプリート\n検索例:カタカナ
513
+
514
+ # # coderay sql
515
+
516
+ # -- ユーザーが「ギュウ」を入力した場合
517
+ # SELECT term FROM terms
518
+ # -- ヨミで前方一致検索(ヒット)
519
+ # WHERE readings &^~ 'ギュウ' OR
520
+ # -- 緩い全文検索
521
+ # term &@ 'ギュウ'
522
+ # ORDER BY term LIMIT 10; -- ソート
523
+
524
+ # = オートコンプリート\n検索例:ひらがな
525
+
526
+ # # coderay sql
527
+
528
+ # -- ユーザーが「ぎゅう」を入力した場合
529
+ # SELECT term FROM terms
530
+ # -- ヨミで前方一致検索(ヒット)
531
+ # WHERE readings &^~ 'ぎゅう' OR
532
+ # -- 緩い全文検索
533
+ # term &@ 'ぎゅう'
534
+ # ORDER BY term LIMIT 10; -- ソート
535
+
536
+ # = オートコンプリート\n検索例:ローマ字
537
+
538
+ # # coderay sql
539
+
540
+ # -- ユーザーが「gyu」を入力した場合
541
+ # SELECT term FROM terms
542
+ # -- ヨミで前方一致検索(ヒット)
543
+ # WHERE readings &^~ 'gyu' OR
544
+ # -- 緩い全文検索
545
+ # term &@ 'gyu'
546
+ # ORDER BY term LIMIT 10; -- ソート
547
+
548
+ # = 同義語展開
549
+
550
+ # * 同義語
551
+ # * 同じ意味だが表記が異なる語
552
+ # * 例:「牛乳」と「ミルク」
553
+ # * どの表記でもヒットして欲しい
554
+ # * 同義語展開→同義語すべてでOR検索
555
+
556
+ # = 同義語展開\n実装方法
557
+
558
+ # * 同義語管理テーブルを作成
559
+ # * クエリー内の同義語を展開
560
+ # * 展開後のクエリーで検索
561
+
562
+ # (('tag:xx-small'))
563
+ # ((<"https://pgroonga.github.io/ja/reference/functions/pgroonga-query-expand.html"|URL:https://pgroonga.github.io/ja/reference/functions/pgroonga-query-expand.html>))
564
+
565
+ # = 同義語展開:テーブル定義
566
+
567
+ # # coderay sql
568
+ # CREATE TABLE synonyms (
569
+ # -- 展開対象の語
570
+ # term text,
571
+ # -- 同義語のリスト
572
+ # -- term自身も含める
573
+ # -- 含めない場合はtermが検索禁止語になる
574
+ # terms text[]
575
+ # );
576
+
577
+ # = 同義語展開:データ例
578
+
579
+ # # coderay sql
580
+ # INSERT INTO synonyms
581
+ # VALUES ('牛乳', -- 「牛乳」を展開
582
+ # ARRAY['牛乳', 'ミルク']),
583
+ # ('ミルク', -- 「ミルク」を展開
584
+ # ARRAY['ミルク', '牛乳']);
585
+
586
+ # = 同義語展開:データ管理のポイント
587
+
588
+ # * 普通のテーブルなので管理が楽
589
+ # * 追加・削除・更新が楽
590
+ # * ダンプ・リストアもいつも通り
591
+ # * レプリケーションもいつも通り
592
+
593
+ # = 同義語展開:インデックス定義
594
+
595
+ # # coderay sql
596
+ # CREATE INDEX synonym_search ON synonyms
597
+ # USING PGroonga
598
+ # -- ...text_term_search...
599
+ # -- termで完全一致検索をするため
600
+ # (term pgroonga_text_term_search_ops_v2);
601
+
602
+ # = 同義語展開:確認方法
603
+
604
+ # # coderay sql
605
+
606
+ # SELECT pgroonga_query_expand(
607
+ # 'synonyms', -- テーブル名
608
+ # 'term', -- 展開対象のカラム名
609
+ # 'terms', -- 対応する同義語配列のカラム名
610
+ # '牛乳' -- クエリー
611
+ # );
612
+ # -- '((牛乳) OR (ミルク))'
613
+
614
+ # = 同義語展開:検索方法
615
+
616
+ # # coderay sql
617
+ # SELECT title FROM entries
618
+ # WHERE
619
+ # -- title &@~ 'アイス ((牛乳) OR (ミルク))'になる
620
+ # title &@~
621
+ # pgroonga_query_expand('synonyms',
622
+ # 'term',
623
+ # 'terms',
624
+ # 'アイス 牛乳');
625
+
626
+ # = 類似文書検索
627
+
628
+ # # image
629
+ # # src = images/php-document-search-similar-search.png
630
+ # # relative_height = 100
631
+
632
+ # = 類似文書検索
633
+
634
+ # * 検索クエリーは文書そのもの
635
+ # * キーワードではない
636
+ # * 関連エントリーの提示に使える
637
+ # * メタデータがあるなら組み合わせる\n
638
+ # →精度向上
639
+ # * メタデータ:タグ・行動履歴など
640
+
641
+ # = 類似文書検索:実現方法
642
+
643
+ # * 類似検索用インデックスが必要
644
+ # * 自然言語に合わせた処理で精度向上
645
+ # * 日本語ならMeCabを活用
646
+ # * 類似検索用の演算子を使う
647
+
648
+ # = 類似文書検索:インデックス定義
649
+
650
+ # # coderay sql
651
+
652
+ # CREATE INDEX entries_similar_search
653
+ # ON entries
654
+ # -- タイトルと内容を合わせたテキストをインデックス
655
+ # -- 理由1:タイトルも重要→対象に加えて精度向上
656
+ # -- 理由2:PostgreSQLが全文検索インデックスと
657
+ # -- 区別できるように
658
+ # USING PGroonga (id, (title || ' ' || content))
659
+ # -- TokenMecabを使うと精度向上
660
+ # WITH (tokenizer='TokenMecab');
661
+
662
+ # = 類似文書検索:検索方法
663
+
664
+ # # coderay sql
665
+
666
+ # SELECT title,
667
+ # pgroonga_score(entries) AS score
668
+ # FROM entries
669
+ # WHERE
670
+ # -- &@*で類似文書検索
671
+ # -- 既存文書の内容をそのまま指定
672
+ # (title || ' ' || content) &@*
673
+ # '...Groongaで高速全文検索!...'
674
+ # ORDER BY score DESC LIMIT 3;
675
+
676
+ # = 類似文書検索:結果例
677
+
678
+ # クエリー:
679
+ # ...Groongaで高速全文検索!...
680
+
681
+ # ヒット例:
682
+ # ...PGroongaで高速全文検索!...
683
+
684
+ # = おさらい:基本機能
685
+
686
+ # * 高速全文検索+ソート
687
+ # * 検索キーワードハイライト
688
+ # * キーワード周辺テキスト表示
689
+
690
+ # = おさらい:高度な機能
691
+
692
+ # * オートコンプリート
693
+ # * ローマ字対応(zen→全文検索)
694
+ # * 類似文書検索
695
+ # * 同義語展開
696
+ # * 「牛乳」→\n
697
+ # 「牛乳 OR ミルク」
698
+
699
+ # = 全文検索システムの実装\n次の一歩
700
+
701
+ # * 構造化データ対応
702
+ # * オフィス文書・HTMLなど
703
+ # * 対応に必要な処理
704
+ # * テキスト抽出
705
+ # * メタデータ抽出(('note:(例:タイトル・更新日時)'))
706
+ # * スクリーンショット作成(('note:(なおよい)'))
707
+
708
+ # = 抽出ツール
709
+
710
+ # * Apache Tika
711
+ # * Apache Luceneのサブプロジェクト
712
+ # * 対応フォーマット数が多い
713
+ # * ChupaText
714
+ # * Groongaのサブプロジェクト
715
+ # * スクリーンショット作成対応
716
+
717
+ # = ChupaText
718
+
719
+ # * 対応フォーマット
720
+ # * Word/Excel/PowerPoint
721
+ # * ODT/ODS/ODP(('note:(OpenDocument)'))
722
+ # * PDF/HTML/XML/CSV/...
723
+ # * インターフェイス
724
+ # * HTTPとコマンドライン
725
+
726
+ # = ChupaText:インストール
727
+
728
+ # * DockerかVagrantを使うのが楽
729
+ # * (('tag:xx-small'))
730
+ # ((<"https://github.com/ranguba/chupa-text-docker"|URL:https://github.com/ranguba/chupa-text-docker>))
731
+ # * (('tag:xx-small'))
732
+ # ((<"https://github.com/ranguba/chupa-text-vagrant"|URL:https://github.com/ranguba/chupa-text-vagrant>))
733
+
734
+ # = ChupaText:Docker
735
+
736
+ # # coderay console
737
+ # % GITHUB=https://github.com
738
+ # % git clone \
739
+ # ${GITHUB}/ranguba/chupa-text-docker.git
740
+ # % cd chupa-text-docker
741
+ # % docker-compose up --build
742
+
743
+ # = ChupaText:使い方
744
+
745
+ # # coderay console
746
+ # % curl \
747
+ # --form data=@XXX.pdf \
748
+ # http://localhost:20080/extraction.json
749
+
750
+ # = ChupaText:結果例
751
+
752
+ # # coderay json
753
+
754
+ # {
755
+ # "mime-type": "application/pdf", # 元データのMIMEタイプ
756
+ # "size": 147159, # メタデータ
757
+ # ...,
758
+ # "texts": [ # 抽出されたテキスト(N個)
759
+ # {
760
+ # "mime-type": "text/plain", # 抽出後のMIMEタイプ
761
+ # ...,
762
+ # "creator": "Adobe Illustrator CS3", # メタデータ
763
+ # "body": "This is sample PDF. ...", # 抽出したテキスト
764
+ # "screenshot": {
765
+ # "mime-type": "image/png", # スクリーンショットのMIMEタイプ
766
+ # "data": "iVBORw...", # Base64にした画像データ
767
+ # "encoding": "base64" # Base64であることを明記
768
+ # }
769
+ # }
770
+ # ]
771
+ # }
772
+
773
+ # = ChupaText:Web UI
774
+
775
+ # # image
776
+ # # src = images/chupa-text-web-ui-form.png
777
+ # # relative_height = 100
778
+
779
+ # = ChupaText:Web UI抽出例
780
+
781
+ # # image
782
+ # # src = images/chupa-text-web-ui-extract-metadata.png
783
+ # # relative_height = 100
784
+
785
+ # = ChupaText:Web UI抽出例
786
+
787
+ # # image
788
+ # # src = images/chupa-text-web-ui-extract-text-and-screenshot.png
789
+ # # relative_height = 100
790
+
791
+ # = ChupaText:Vagrant
792
+
793
+ # # coderay console
794
+ # % GITHUB=https://github.com
795
+ # % git clone \
796
+ # ${GITHUB}/ranguba/chupa-text-vagrant.git
797
+ # % cd chupa-text-vagrant
798
+ # % vagrant up
799
+
800
+ # (('tag:center'))
801
+ # 使い方はDocker版と同じ
802
+
803
+ # = ChupaText:活用例
804
+
805
+ # * 抽出したテキスト
806
+ # * PGroongaへ挿入
807
+ # * 抽出したメタデータ
808
+ # * PGroongaへ挿入
809
+ # * 絞り込みに活用
810
+ # * 作成したスクリーンショット
811
+ # * 検索結果表示時に掲載
812
+
813
+ # = まとめ
814
+
815
+ # * PostgreSQL経由で\n
816
+ # 全文検索エンジン
817
+ # * 採用の判断材料を提供
818
+ # * 全文検索システム実装例を紹介
819
+ # * PGroonga
820
+ # * 構造化データの対応方法を紹介
821
+ # * ChupaText
822
+
823
+ # = 扱わなかった話題
824
+
825
+ # * 運用について
826
+ # * 障害対策・レプリケーション
827
+ # * ロジカルレプリケーションは\n
828
+ # 対応済み!(('note:(少しだけ設定方法を紹介)'))
829
+ # * チューニング
830
+ # * Groongaの機能を直接使う方法
831
+
832
+ # = ロジカルレプリケーション\npostgresql.conf
833
+
834
+ # # coderay conf
835
+ # # マスター
836
+ # wal_level = logical
837
+ # max_wal_senders = 10
838
+ # max_replication_slots = 10
839
+
840
+ # = ロジカルレプリケーション\nDB作成・PGroongaインストール
841
+
842
+ # # coderay sql
843
+ # -- マスター
844
+ # CREATE DATABASE test_master;
845
+ # \c test_master
846
+ # CREATE EXTENSION pgroonga;
847
+
848
+ # = ロジカルレプリケーション\nテーブル作成
849
+
850
+ # # coderay sql
851
+ # -- マスター
852
+ # CREATE TABLE memos (
853
+ # id integer PRIMARY KEY,
854
+ # content text
855
+ # );
856
+ # CREATE INDEX
857
+ # full_text_search_index ON memos
858
+ # USING pgroonga (id, content);
859
+
860
+ # = ロジカルレプリケーション\nレプリケーション用ユーザー作成
861
+
862
+ # # coderay sql
863
+ # -- マスター
864
+ # -- pg_hba.confも編集すること
865
+ # CREATE ROLE replica
866
+ # WITH REPLICATION
867
+ # LOGIN PASSWORD 'pass';
868
+ # GRANT SELECT
869
+ # ON ALL TABLES IN SCHEMA public
870
+ # TO replica;
871
+
872
+ # = ロジカルレプリケーション\npublication作成
873
+
874
+ # # coderay sql
875
+ # -- マスター
876
+ # CREATE PUBLICATION pub
877
+ # FOR TABLE memos;
878
+
879
+ # = ロジカルレプリケーション\nDB作成・PGroongaインストール
880
+
881
+ # # coderay sql
882
+ # -- スレーブ
883
+ # CREATE DATABASE test_slave;
884
+ # \c test_slave
885
+ # CREATE EXTENSION pgroonga;
886
+
887
+ # = ロジカルレプリケーション\nテーブル作成
888
+
889
+ # # coderay sql
890
+ # -- スレーブ
891
+ # CREATE TABLE memos (
892
+ # id integer PRIMARY KEY,
893
+ # content text
894
+ # );
895
+ # CREATE INDEX
896
+ # full_text_search_index ON memos
897
+ # USING pgroonga (id, content);
898
+
899
+ # = ロジカルレプリケーション\nsubscription作成
900
+
901
+ # # coderay sql
902
+ # -- スレーブ
903
+ # CREATE SUBSCRIPTION sub
904
+ # CONNECTION
905
+ # 'host=192.168.0.18 port=5432
906
+ # user=replica password=pass
907
+ # dbname=test_master'
908
+ # PUBLICATION pub;
909
+
910
+ # = ロジカルレプリケーション\n確認
911
+
912
+ # # coderay sql
913
+ # -- マスター
914
+ # INSERT INTO memos VALUES (1, '全文検索');
915
+ # -- スレーブ
916
+ # SELECT * FROM memos
917
+ # WHERE content &@~ '全文検索';
918
+ # -- id | content
919
+ # -- ----+----------
920
+ # -- 1 | 全文検索
921
+ # -- (1 row)
922
+
923
+ = サポートサービス紹介
924
+
925
+ # * 導入支援(('note:(設計支援・性能検証・移行支援・…)'))
926
+ # * 開発支援\n
927
+ # (('note:(サンプルコード提供・問い合わせ対応・…)'))
928
+ # * 運用支援(('note:(障害対応・チューニング支援・…)'))
929
+
930
+ 問い合わせ先:
931
+
932
+ (('tag:x-small'))
933
+ ((<"https://www.clear-code.com/contact/?type=groonga"|URL:https://www.clear-code.com/contact/?type=groonga>))
@@ -0,0 +1,5 @@
1
+ @groonga_product = "pgroonga"
2
+ # @title_slide_title_font_size = @large_font_size * 0.9
3
+ # @title_slide_content_source_font_size = @xx_small_font_size
4
+
5
+ include_theme("groonga")
metadata ADDED
@@ -0,0 +1,87 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rabbit-slide-kou-postgresql-conference-2017
3
+ version: !ruby/object:Gem::Version
4
+ version: 2017.11.3.0
5
+ platform: ruby
6
+ authors:
7
+ - Kouhei Sutou
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-11-03 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rabbit
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 2.0.2
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 2.0.2
27
+ - !ruby/object:Gem::Dependency
28
+ name: rabbit-theme-groonga
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ description: PostgreSQLが苦手な全文検索機能を強力に補完する拡張機能PGroongaの最新情報を紹介します。PGroongaは単なる全文検索モジュールではありません。PostgreSQLで簡単にリッチな全文検索システムを実現するための機能一式を提供します。PGroongaは最新PostgreSQLへの対応も積極的です。例としてロジカルレプリケーションと組み合わせた活用方法も紹介します。
42
+ email:
43
+ - kou@clear-code.com
44
+ executables: []
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - ".rabbit"
49
+ - README.rd
50
+ - Rakefile
51
+ - config.yaml
52
+ - images/chupa-text-web-ui-extract-metadata.png
53
+ - images/chupa-text-web-ui-extract-text-and-screenshot.png
54
+ - images/chupa-text-web-ui-form.png
55
+ - images/php-document-search-search.png
56
+ - images/php-document-search-similar-search.png
57
+ - images/php-document-search.png
58
+ - images/search-pg-bigm.pdf
59
+ - images/search-pgroonga-pg-bigm.pdf
60
+ - pdf/postgresql-conference-2017-pgroonga-2.pdf
61
+ - pgroonga-2.rab
62
+ - theme.rb
63
+ homepage: http://slide.rabbit-shocker.org/authors/kou/postgresql-conference-2017/
64
+ licenses:
65
+ - CC-BY-SA-4.0
66
+ metadata: {}
67
+ post_install_message:
68
+ rdoc_options: []
69
+ require_paths:
70
+ - lib
71
+ required_ruby_version: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ required_rubygems_version: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ version: '0'
81
+ requirements: []
82
+ rubyforge_project:
83
+ rubygems_version: 2.5.2.1
84
+ signing_key:
85
+ specification_version: 4
86
+ summary: PGroonga 2 - PostgreSQLでの全文検索の決定版
87
+ test_files: []