rabbit-slide-komainu8-july-tech-festa-2021-winter 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 1d461b0072c8d676b497b42f1f3f496229fbd3a0d72c160ceafddce65043c963
4
+ data.tar.gz: 6055dce05999c55d3beee1c627b7d10f85edd0fdc049ecd3a8844ce748b345d9
5
+ SHA512:
6
+ metadata.gz: 1d1fbd912e1dba9728651ea1a3afc5de192c9710d39288e2887edd6f35f0bca916332a62300ecdfa6b853fb470cd17c35fb2e10220fafe81428d95686933c303
7
+ data.tar.gz: cb4579dc3c33a5727b07ee998e59651bc681e8e26eee81418add29a7bd5ecb62fbe7b357de6d5db632fe32c081999ac1d389dc42563f7bed38612220db2f5e05
data/.rabbit ADDED
@@ -0,0 +1 @@
1
+ introduction-to-pgroonga.rab
@@ -0,0 +1,85 @@
1
+ = PostgreSQLで高速・高機能な日本語全文検索
2
+
3
+ PostgreSQLで日本語の全文検索をするには、LIKE演算子を使って実現できますが、インデックスを使用しないため、データ量が多い場合には低速です。
4
+ 英文については、インデックスを使用した全文検索が可能ですが、日本語には対応していません。
5
+ PGroonga(ぴーじーるんが)は、全言語対応の高速な全文検索機能をPostgreSQLで使えるようにする拡張で、安定して高速で、かつ高機能です。
6
+
7
+ 本発表では、PGroongaの速さや便利さを紹介します。
8
+
9
+ == ライセンス
10
+
11
+ === スライド
12
+
13
+ CC BY-SA 4.0
14
+
15
+ 原著作者:堀本泰弘
16
+
17
+ === Groonga・PGroonga・Mroonga・Rroongaのロゴ
18
+
19
+ CC BY 3.0
20
+
21
+ 原著作者:Groongaプロジェクト
22
+
23
+ === 株式会社クリアコードのロゴ
24
+
25
+ CC BY-SA 4.0
26
+
27
+ 原著作者:株式会社クリアコード
28
+
29
+ === 青空文庫の書籍一覧データ
30
+
31
+ CC BY-SA 2.1
32
+
33
+ 原著作者:河原 翔
34
+ 作品タイトル:青空文庫 形態素解析データ集
35
+ URL:http://aozora-word.hahasoha.net/
36
+
37
+ === 日本全国の住所データ
38
+
39
+ 原著作者:有限会社ゼネラルソフトウェア
40
+ URL:http://jusyo.jp/index.html
41
+
42
+ === Wikipedia日本語版のタイトル一覧
43
+
44
+ CC-BY-SA 3.0 Unported
45
+
46
+ 原著作者:ウィキペディア日本語版
47
+ URL:https://ja.wikipedia.org/
48
+
49
+ == 作者向け
50
+
51
+ === 表示
52
+
53
+ rake
54
+
55
+ === 公開
56
+
57
+ rake publish
58
+
59
+ == 閲覧者向け
60
+
61
+ === インストール
62
+
63
+ gem install rabbit-slide-komainu8-july-tech-festa-2021-winter
64
+
65
+ === 表示
66
+
67
+ rabbit rabbit-slide-komainu8-july-tech-festa-2021-winter.gem
68
+
69
+ == ベンチマーク実行方法
70
+
71
+ === 準備
72
+
73
+ docker-composeが必要なので予めインストールする。
74
+
75
+ データベースのパスワードを要求されるので、
76
+
77
+ export PGPASSWORD=PGroonga
78
+
79
+ を実行しておく。
80
+
81
+ === ベンチマーク実行
82
+
83
+ git clone git@github.com:komainu8/rabbit-slide-komainu8-july-tech-festa-2021-winter.git
84
+ cd rabbit-slide-komainu8-july-tech-festa-2021-winter
85
+ ./exec-benchmark.sh
@@ -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-YOUR-THEME")
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,31 @@
1
+ ---
2
+ id: july-tech-festa-2021-winter
3
+ base_name: introduction-to-pgroonga
4
+ tags:
5
+ - rabbit
6
+ - jtf2021w
7
+ - fts
8
+ - search
9
+ - pgroonga
10
+ - groonga
11
+ presentation_date: 2021-01-24
12
+ presentation_start_time: 2021-01-24T14:20:00+09:00
13
+ presentation_end_time: 2021-01-24T14:45:00+09:00
14
+ version: 1.0.0
15
+ licenses:
16
+ - CC-BY-SA-4.0
17
+ - CC-BY-SA-3.0-Unported
18
+ - CC-BY-SA-2.1
19
+ - CC-BY-3.0
20
+ slideshare_id:
21
+ speaker_deck_id:
22
+ ustream_id:
23
+ vimeo_id:
24
+ youtube_id:
25
+ author:
26
+ markup_language: :rd
27
+ name: 堀本泰弘
28
+ email: horimoto@clear-code.com
29
+ rubygems_user: komainu8
30
+ slideshare_user:
31
+ speaker_deck_user:
Binary file
Binary file
@@ -0,0 +1,386 @@
1
+ = PostgreSQLで\n高速・高機能な日本語\n全文検索
2
+
3
+ : author
4
+ 堀本泰弘
5
+ : institution
6
+ 株式会社クリアコード
7
+ : content-source
8
+ July Tech Festa 2021 winter
9
+ : date
10
+ 2021-01-24
11
+ : allotted-time
12
+ 20m
13
+ : start-time
14
+ 2021-01-24T14:20:00+09:00
15
+ : end-time
16
+ 2021-01-24T14:40:00+09:00
17
+ : theme
18
+ .
19
+
20
+ = 自己紹介
21
+
22
+ # image
23
+ # src = images/self-introduction.png
24
+ # relative_height = 107
25
+
26
+ = 今日のテーマ
27
+
28
+ PostgreSQLで\n((*高速*))・((*高機能*))な日本語全文検索\nを実現する
29
+
30
+ = 今日のテーマ
31
+
32
+ ...の前に
33
+
34
+ = 全文検索?
35
+
36
+ = 全文検索?
37
+
38
+ ((*全*))ての((*文*))書から特定の文字列を\n((*検索*))する
39
+
40
+ = 全文検索?
41
+
42
+ # image
43
+ # src = images/web-search.png
44
+ # relative_height = 87
45
+
46
+ = 全文検索?
47
+
48
+ # coderay shell
49
+
50
+ % grep PGroonga ./*
51
+ ./docker-compose.yml: PGroonga:
52
+ ./docker-compose.yml: POSTGRES_DB: PGroonga
53
+ ./docker-compose.yml: POSTGRES_PASSWORD: PGroonga
54
+ ./docker-compose.yml: POSTGRES_USER: PGroonga
55
+
56
+ = 全文検索の対象
57
+
58
+ (('tag:center'))
59
+ (('tag:large'))
60
+ (('tag:margin-bottom * 2'))
61
+ 大量のテキスト
62
+
63
+ * 例:Redmineのwiki・チケット
64
+ * 例:チャットログ
65
+ * 例:口コミ
66
+
67
+ = 参考
68
+
69
+ * Redmineでは既にPGroongaを使った全文検索をするプラグインがある
70
+
71
+ * ((<URL:https://github.com/clear-code/redmine_full_text_search>))
72
+ * ((<URL:https://www.slideshare.net/kou/redminetokyo12>))
73
+
74
+ = PostgreSQLの全文検索
75
+
76
+ * LIKE:組み込み
77
+ * textsearch:組み込み
78
+ * pg_trgm:標準添付
79
+ * pg_bigm:プラグイン
80
+ * PGroonga:プラグイン
81
+
82
+ = PostgreSQLの全文検索
83
+
84
+ * ((*LIKE*)):組み込み
85
+ * ((*textsearch*)):組み込み
86
+ * pg_trgm:標準添付
87
+ * pg_bigm:プラグイン
88
+ * ((*PGroonga*)):プラグイン
89
+
90
+ = 参考
91
+
92
+ * pg_trgmとpg_bigmとPGroongaの比較は以下の記事を参照
93
+
94
+ * ((<URL:https://groonga.org/ja/blog/2016/11/30/pgroonga-1.1.9.html>))
95
+
96
+ = PostgreSQLの全文検索
97
+
98
+ # RT
99
+ delimiter = [|]
100
+
101
+ 名前 | 日本語 | 速度 | 機能
102
+
103
+ LIKE | ○ | △ | ☓
104
+ textsearch | ☓ | ○ | △
105
+ PGroonga | ○ | ○ | ○
106
+
107
+ = LIKE
108
+
109
+ * メリット
110
+
111
+ * 標準で使える
112
+ * インデックス作成不要(データ更新が遅くならない)
113
+ * データが少なければ十分高速
114
+
115
+ = LIKE
116
+
117
+ * デメリット
118
+
119
+ * データ量に比例して遅くなる
120
+ * 類似文書検索、同義語検索等の便利な機能はない
121
+
122
+ = textsearch
123
+
124
+ * メリット
125
+
126
+ * 標準で使える
127
+ * インデックスを作成するので、データ量が多くても高速
128
+ * 同義語検索、検索結果のランキング、結果のハイライトなど、便利な機能がある
129
+
130
+ = textsearch
131
+
132
+ * デメリット
133
+
134
+ * 言語毎にモジュールが必要
135
+ * 英語やフランス語のモジュールは組み込み
136
+ * 日本語は別途インストールが必要
137
+ * 日本語のモジュールは現在メンテナンスされてない
138
+
139
+ = PGroongaを使った全文検索
140
+
141
+ = PGroonga?
142
+
143
+ 読み方
144
+
145
+ = PGroonga?
146
+
147
+ PGroonga\n
148
+ (ぴ−じーるんが)
149
+
150
+ = PGroongaとは?
151
+
152
+ PostgreSQLで\n((*高速・高機能な*))全文検索を実現\nする拡張
153
+
154
+ = PGroongaの特徴
155
+
156
+ (1) ((*簡単*))に使える
157
+ (2) ((*速い*))
158
+ (3) ((*全言語*))対応
159
+
160
+ = 使い方
161
+
162
+ # image
163
+ # src = images/pgroonga-sql.png
164
+ # relative_height = 107
165
+
166
+ = 使い方
167
+
168
+ 実際に全文検索\nしてみましょう
169
+
170
+ = 実行例:テーブル定義
171
+
172
+ # coderay sql
173
+
174
+ CREATE TABLE entries (
175
+ title text,
176
+ content text
177
+ );
178
+
179
+ = 実行例:\nインデックス定義
180
+
181
+ # coderay sql
182
+
183
+ -- 全文検索用インデックス
184
+ CREATE INDEX entries_full_text_search
185
+ ON entries
186
+ --「USING pgroonga」=「PGroongaを使う」
187
+ USING pgroonga (title, content);
188
+
189
+ = 実行例:データ挿入
190
+
191
+ # coderay sql
192
+
193
+ -- 普通に挿入するだけでよい
194
+ INSERT INTO entries
195
+ VALUES ('PGroongaで高速全文検索!',
196
+ '高速に全文検索したいですね!');
197
+
198
+ = 実行例:全文検索
199
+
200
+ # coderay sql
201
+
202
+ SELECT title FROM entries
203
+ WHERE
204
+ -- &@~で全文検索
205
+ -- 「検索」と「高速」をAND検索
206
+ title &@~ '検索 高速' OR
207
+ content &@~ '検索 高速';
208
+
209
+ = 実行例:LIKE
210
+
211
+ # coderay sql
212
+
213
+ SELECT title FROM entries
214
+ WHERE
215
+ -- LIKEでもインデックスが効く
216
+ --=アプリを書き換えずに高速化可能
217
+ -- ただし&@~より性能が落ちる
218
+ title LIKE '%検索%' OR
219
+ content LIKE '%検索%';
220
+
221
+ = 使い方
222
+
223
+ ((*簡単*))ですね!
224
+
225
+ = 速度
226
+
227
+ ((*安定*))して速い
228
+
229
+ = ベンチマーク
230
+
231
+ = 青空文庫の書籍一覧
232
+
233
+ # RT
234
+ delimiter = [|]
235
+
236
+ 件数 | LIKE\n速度[ms] | PGroonga\n速度[ms]
237
+
238
+ 11,818件 | 1.916 | 0.290
239
+
240
+ = 日本全国の住所
241
+
242
+ # RT
243
+ delimiter = [|]
244
+
245
+ 件数 | LIKE\n速度[ms] | PGroonga\n速度[ms]
246
+
247
+ 149,724件 | 17.277 | 0.850
248
+
249
+ = Wikipedia日本語版のタイトル
250
+
251
+ # RT
252
+ delimiter = [|]
253
+
254
+ 件数 | LIKE\n速度[ms] | PGroonga\n速度[ms]
255
+
256
+ 3,677,375件 | 128.776 | 0.371
257
+
258
+ = ベンチマーク
259
+
260
+ # image
261
+ # src = images/benchmark-graph.png
262
+ # relative_height = 100
263
+
264
+ = ベンチマークのデータ
265
+
266
+ * 使用したSQLは以下を参照
267
+
268
+ * ((<URL:https://github.com/komainu8/rabbit-slide-komainu8-july-tech-festa-2021-winter/tree/master/benchmark>))
269
+
270
+ = ベンチマークのデータ
271
+
272
+ * 追試用スクリプト
273
+
274
+ * ((<URL:https://github.com/komainu8/rabbit-slide-komainu8-july-tech-festa-2021-winter/blob/master/exec-benchmark.sh>))
275
+ * 使い方はREADME参照
276
+
277
+ = 機能
278
+
279
+ * 全文検索に必要そうな機能は\n一通り揃っている
280
+ * 同義語検索
281
+ * 類似文書検索
282
+ * 読みがな検索
283
+ * 入力補完 etc..
284
+
285
+ = 機能
286
+
287
+ * 全文検索に必要そうな機能は\n一通り揃っている
288
+ * 同義語検索
289
+ * 類似文書検索
290
+ * ((*読みがな検索*))
291
+ * 入力補完 etc..
292
+
293
+ = 読みがな検索
294
+
295
+ 「やきにく」\nってどう書きますか?
296
+
297
+ = 読みがな検索
298
+
299
+ * やきにく
300
+ * 焼き肉
301
+ * 焼肉
302
+ * やき肉
303
+ * ヤキニク
304
+
305
+ = 読みがな検索
306
+
307
+ 当然ですがどれも「やきにく」と読みます
308
+
309
+ = 読みがな検索
310
+
311
+ * 読みが同じなので、以下は全部同じものとして扱えます
312
+ * やきにく
313
+ * 焼き肉
314
+ * 焼肉
315
+ * やき肉
316
+ * ヤキニク
317
+
318
+ = 読みがな検索
319
+
320
+ 例えば\n「やきにく」で検索すると
321
+
322
+ = 読みがな検索
323
+
324
+ * 「やきにく」((*Hit!*))
325
+ * 「焼き肉」((*Hit!*))
326
+ * 「焼肉」((*Hit!*))
327
+ * 「やき肉」((*Hit!*))
328
+ * 「ヤキニク」((*Hit!*))
329
+
330
+ = 読みがな検索
331
+
332
+ 異体字
333
+
334
+ = 読みがな検索
335
+
336
+ 「広」と「廣」
337
+
338
+ = 読みがな検索
339
+
340
+ 例えば人名の\n検索
341
+
342
+ = 読みがな検索
343
+
344
+ 検索キーワード「広瀬」で
345
+ * 「広瀬」((*Hit*))
346
+ * 「廣瀬」((*Hit*))
347
+ となってほしい
348
+
349
+ = 読みがな検索
350
+
351
+ 通常の検索\n
352
+ 検索キーワード「広瀬」で
353
+ * 「広瀬」のみ((*Hit*))
354
+
355
+ = 読みがな検索
356
+
357
+ 読みがな検索なら\n
358
+ 検索キーワード「広瀬」で
359
+ * 「広瀬」((*Hit*))
360
+ * 「廣瀬」((*Hit*))
361
+
362
+ = 読みがな検索
363
+
364
+ 両方ヒット!
365
+
366
+ = 読みがな検索
367
+
368
+ 「広瀬」も\n「廣瀬」も\n読みが同じ
369
+
370
+ = 他にも
371
+
372
+ * それっぽい順でソート
373
+ * キーワードハイライト
374
+ * キーワードの周辺テキスト表示
375
+
376
+ = 他にも
377
+
378
+ * 電話番号検索
379
+ * 090-1234-5678 と 090 1234 5678、(090)1234-5678 等
380
+ * fuzzy検索
381
+ * typo対策
382
+ * テクノロジーとテノクロジー
383
+
384
+ = まとめ
385
+
386
+ PGroongaで\n((*高速高機能*))な\n日本語全文検索が実現できます!
@@ -0,0 +1,5 @@
1
+ @title_slide_title_font_size = @large_font_size
2
+
3
+ @groonga_product = "pgroonga"
4
+
5
+ include_theme("groonga")
metadata ADDED
@@ -0,0 +1,76 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rabbit-slide-komainu8-july-tech-festa-2021-winter
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - 堀本泰弘
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2021-01-22 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
+ description: |-
28
+ PostgreSQLで日本語の全文検索をするには、LIKE演算子を使って実現できますが、インデックスを使用しないため、データ量が多い場合には低速です。
29
+ 英文については、インデックスを使用した全文検索が可能ですが、日本語には対応していません。
30
+ PGroonga(ぴーじーるんが)は、全言語対応の高速な全文検索機能をPostgreSQLで使えるようにする拡張で、安定して高速で、かつ高機能です。
31
+
32
+ 本発表では、PGroongaの速さや便利さを紹介します。
33
+ email:
34
+ - horimoto@clear-code.com
35
+ executables: []
36
+ extensions: []
37
+ extra_rdoc_files: []
38
+ files:
39
+ - ".rabbit"
40
+ - README.rd
41
+ - Rakefile
42
+ - config.yaml
43
+ - images/benchmark-graph.png
44
+ - images/pgroonga-sql.png
45
+ - images/self-introduction.png
46
+ - images/web-search.png
47
+ - introduction-to-pgroonga.rab
48
+ - pdf/july-tech-festa-2021-winter-introduction-to-pgroonga.pdf
49
+ - theme.rb
50
+ homepage: https://slide.rabbit-shocker.org/authors/komainu8/july-tech-festa-2021-winter/
51
+ licenses:
52
+ - CC-BY-SA-4.0
53
+ - CC-BY-SA-3.0-Unported
54
+ - CC-BY-SA-2.1
55
+ - CC-BY-3.0
56
+ metadata: {}
57
+ post_install_message:
58
+ rdoc_options: []
59
+ require_paths:
60
+ - lib
61
+ required_ruby_version: !ruby/object:Gem::Requirement
62
+ requirements:
63
+ - - ">="
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ required_rubygems_version: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
71
+ requirements: []
72
+ rubygems_version: 3.1.4
73
+ signing_key:
74
+ specification_version: 4
75
+ summary: PostgreSQLで高速・高機能な日本語全文検索
76
+ test_files: []