SlideShare a Scribd company logo
1 of 124
Download to read offline
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
MySQL・PostgreSQLだけで作る
高速でリッチな全文検索システム
須藤功平 株式会社クリアコード
db tech showcase Tokyo 2017
2017-09-07
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
全文検索システム
対象
大量のテキスト
例:Wikiのデータ
例:オフィス文書のテキスト
例:商品説明・口コミ
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
全文検索システム
目的
必要な情報を
必要なときに
活用
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
必要な情報を活用
×
探している情報が見つからない
○
探している情報が見つかる
◎
意識していなかったけど
実は欲しかった情報も見つかる!
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
必要なときに活用
×
なかなか見つからない
○
すぐに見つかる
◎
すでに見つかっていた
例:レコメンデーション
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
実装方法
選択肢
全文検索サーバーを使う
RDBMSを使う
MySQL・MariaDB・PostgreSQLを使う
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
全文検索サーバー案
メリット
必要な機能が揃っている
+αの機能もある
速い
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
全文検索サーバー案
デメリット
実装コスト大
それぞれ独自の使い方だから
マスターデータの同期はどうする?
メンテナンスコスト大
それぞれ独自の仕組みだから
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
RDBMS案
メリット
実装コスト小
新しく覚えることが少ない
データの一元管理
メンテナンスコスト小
既存の運用ノウハウを使える
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
RDBMS案
デメリット
組込機能では機能不足
SQLの表現力不足
1クエリーで実現できない機能アリ
↑は性能を出しにくい
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
実現方法
第3の選択肢
RDBMS経由(SQL)で
全文検索エンジンを使う
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
メリット
高速で豊富な機能
実装コスト小
メンテナンスコスト小
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
デメリット
RDBMSに拡張機能が必要
DBaaSで使えない
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
オススメの選択肢
全文検索の知識ナシ
まだ単純な機能で十分
データ少:RDBMS単独でLIKE
(数十万件とか)
データ中:RDBMS組込全文検索機能
いまどきの全文検索機能が必要
RDBMS経由で全文検索エンジン
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
オススメの選択肢
全文検索の知識アリ
カリカリにチューニングしたい
RDBMSと全文検索サーバーを併用
それ以外
RDBMS経由で全文検索エンジン
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
説明する選択肢
RDBMS経由で
全文検索
エンジン
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
全文検索エンジン
Groonga(ぐるんが)
組込可能な全文検索エンジン
MySQL・MariaDBに組込→Mroonga
PostgreSQLに組込→PGoonga
全文検索サーバーとして
単独でも使用可能
RDBMSと全文検索サーバーを併用
もできる
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
Groongaの得意なこと
データの追加・更新
新鮮な情報をすぐに検索可能に!
更新中も検索性能を落とさない!
日本語
開発者が日本人
便利機能が組み込み
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
Mroonga(むるんが)
MySQLのストレージエンジン
InnoDB・MyISAMなどと同じレイヤー
使用方法
CREATE TABLE (...)
ENGINE=Mroonga
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
MySQL組込の全文検索機能
MySQL:5.7から使える
InnoDB+日本語対応パーサー
MariaDB:10.0.15から使える
Mroongaをバンドル
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
全文検索機能:基本
InnoDB Mroonga
AND/OR/
NOT対応
○ ○
ハイライ
ト
× ○
周辺テキ
スト表示
× ○
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
ハイライト
周辺テキスト表示
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
全文検索機能:高度な機能
InnoDB Mroonga
入力補完 × ○
類似文書
検索
○ ○
クエリー
展開
○ ○
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
全文検索性能の違い
計測データ
対象:Wikipedia日本語版
レコード数:約185万件
データサイズ:約7GB
メモリー4GB・SSD250GB(ConoHa)
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
検索性能1
キーワード:テレビアニメ
(ヒット数:約2万3千件)
InnoDB ngram 3m2s
InnoDB MeCab 6m20s
Mroonga:1 0.11s
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
検索性能2
キーワード:データベース
(ヒット数:約1万7千件)
InnoDB ngram 36s
InnoDB MeCab:1 0.03s
Mroonga:2 0.09s
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
検索性能3
キーワード:PostgreSQL OR MySQL
(ヒット数:約400件)
InnoDB ngram N/A(Error)
InnoDB MeCab:1 0.005s
Mroonga:2 0.028s
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
検索性能4
キーワード:日本
(ヒット数:約63万件)
InnoDB ngram 1.3s
InnoDB MeCab 1.3s
Mroonga:1 0.21s
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
検索性能まとめ
Mroonga:安定して速い
SQLで使えて機能豊富で速い!
InnoDB FTS MeCab
ハマれば速い
InnoDB FTS ngram
安定して遅い
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
PGroonga
(ぴーじーるんが)
PostgreSQLのインデックス
B-tree・GINなどと同じレイヤー
使用方法
CREATE INDEX ...
USING PGroonga ...
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
PostgreSQLの全文検索機能
textsearch(組込)
言語依存
日本語対応はメンテされていない
pg_trgm(同梱)
言語非依存:が、ほぼ日本語非対応
pg_bigm(サードパーティー)
言語非依存:日本語対応
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
全文検索機能:基本
pg_bigm PGroonga
AND/OR/
NOT対応
△※1 ○
ハイライ
ト
△※2 ○
周辺テキ
スト表示
△※2 ○
※1 SQLでAND/OR/NOTを組み合わせると実現可能
※2 PostgreSQLが提供する関数で実現可能。ただし、結果をHTML
で出力する用途では使えない。
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
全文検索機能:高度な機能
pg_bigm PGroonga
入力補完 × ○
類似文書
検索
△※ ○
クエリー
展開
× ○
※ 類似文書検索と言うよりはあいまい検索。
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
全文検索性能の違い
計測データ
対象:Wikipedia日本語版
レコード数:約90万件
データサイズ:約6GB
メモリー32GB・SSD500GB
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
検索性能1
キーワード:テレビアニメ
(ヒット数:約2万件)
pg_bigm 2.800s
PGroonga:1 0.065s
Groonga(参考) 0.038s
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
検索性能2
キーワード:データベース
(ヒット数:約1万5千件)
pg_bigm 1.300s
PGroonga:1 0.049s
Groonga(参考) 0.031s
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
検索性能3
キーワード:PostgreSQL OR MySQL
(ヒット数:約300件)
pg_bigm 0.049s
PGroonga:1 0.002s
Groonga(参考) 0.001s
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
検索性能4
キーワード:日本
(ヒット数:約53万件)
pg_bigm:1 0.479s
PGroonga 0.563s
Groonga(参考) 0.059s
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
検索性能まとめ
PGroonga:安定して速い
SQLで使えて機能豊富で速い!
pg_bigm
ヒット数が少なければ速い
キーワードが2文字以下なら速い
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
全文検索システムの実装
全文検索
キーワードハイライト
周辺テキスト表示
入力補完
同義語展開
関連文書の表示
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
全文検索
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
テーブル定義:Mroonga
CREATE TABLE entries (
title text,
content text,
-- 全文検索用インデックス
-- よくわからないならデフォルトのまま使うこと!
FULLTEXT INDEX (title, content)
) ENGINE=Mroonga
DEFAULT CHARSET=utf8mb4;
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
データ挿入:Mroonga
-- 普通に挿入するだけでよい
INSERT INTO entries
VALUES ('タイトル',
'高速に全文検索したいですね!');
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
全文検索:Mroonga
SELECT title FROM entries
WHERE -- MATCH AGAINSTで全文検索
MATCH (title, content)
-- デフォルトORがMySQLの仕様
-- 「検索」または「高速」を含むとマッチ
AGAINST ('検索 高速'
IN BOOLEAN MODE);
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
AND全文検索:Mroonga
MATCH (title, content)
-- 各キーワードの前に「+」をつけるとAND
-- 「検索」かつ「高速」を含むとマッチ
AGAINST ('+検索 +高速'
IN BOOLEAN MODE);
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
使いやすいAND全文検索
Mroonga
MATCH (title, content)
-- 最初に「*D+」をつけるとデフォルトAND
-- Mroonga独自機能
-- 「検索」かつ「高速」を含むとマッチ
AGAINST ('*D+ 検索 高速'
IN BOOLEAN MODE);
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
スコアー:Mroonga
SELECT
title,
-- ここのMATCH AGAINSTはスコアーを返す
MATCH (title, content)
AGAINST ('*D+ 検索 高速'
IN BOOLEAN MODE) AS score
FROM entries
WHERE -- ...
-- スコアーが高い順にソート
ORDER BY score DESC LIMIT 10;
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
テーブル定義:PGroonga
CREATE TABLE entries (
-- プライマリーキーを用意する
-- スコアーでソートするために必要
id integer PRIMARY KEY,
title text,
content text
);
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
インデックス定義
PGroonga
-- 全文検索用インデックス
-- よくわからないなら
-- デフォルトのまま使うこと!
CREATE INDEX entries_full_text_search
ON entries
--「USING PGroonga」=「PGroongaを使う」
-- スコアーを使うために主キーを入れること!
USING PGroonga (id, title, content);
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
データ挿入:PGroonga
-- 普通に挿入するだけでよい
INSERT INTO entries
VALUES (1,
'Groongaで高速全文検索!',
'高速に全文検索したいですね!');
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
全文検索:PGroonga
SELECT title FROM entries
WHERE
-- &@~で全文検索
-- 「検索」と「高速」をAND検索
title &@~ '検索 高速' OR
content &@~ '検索 高速';
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
全文検索:LIKE
PGroonga
SELECT title FROM entries
WHERE
-- LIKEでもインデックスが効く
--=アプリを書き換えずに高速化可能
-- ただし&@~より性能が落ちる
title LIKE '%検索%' OR
content LIKE '%検索%';
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
スコアー:PGroonga
SELECT
title,
-- pgroonga_score(テーブル名)で
-- スコアーを取得
pgroonga_score(entries) AS score
FROM entries
WHERE -- ...
-- スコアーが高い順にソート
ORDER BY score DESC LIMIT 10;
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
ハイライト
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
ハイライト:Mroonga
SELECT mroonga_highlight_html(
title, '*D+ 検索 高速' AS query)
-- クエリーからハイライト対象のキーワードを抽出
FROM entries
WHERE
MATCH (title, content)
AGAINST ('*D+ 検索 高速' IN BOOLEAN MODE);
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
ハイライト結果例
<Groonga>で高速全文検索!
↓
&lt;Groonga&gt;で ← タグをエスケープ
<span class="keyword">高速</span>
全文 ↑↓キーワードはclass付け
<span class="keyword">検索</span>!
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
ハイライト:PGroonga
SELECT
pgroonga_highlight_html(
title,
-- クエリーから対象キーワードを抽出
pgroonga_query_extract_keywords('検索 高速'))
FROM entries
WHERE title &@~ '検索 高速' OR
content &@~ '検索 高速';
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
ハイライト結果例
<Groonga>で高速全文検索!
↓
&lt;Groonga&gt;で ← タグをエスケープ
<span class="keyword">高速</span>
全文 ↑↓キーワードはclass付け
<span class="keyword">検索</span>!
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
周辺テキスト
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
周辺テキスト:Mroonga
SELECT mroonga_snippet_html(
content, '*D+ 検索 高速' AS query)
-- クエリーから対象のキーワードを抽出
FROM entries
WHERE
MATCH (title, content)
AGAINST ('*D+ 検索 高速' IN BOOLEAN MODE);
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
周辺テキスト結果例
...<Groonga>で高速全文検索!...
↓
<div class="snippet"> ←1つ目
ga&gt;で ←タグをエスケープ
<span class="keyword">高速</span>
全文 ↑↓キーワードはclass付け
<span class="keyword">検索/span>!
</div>
<div class="snippet">...</div> ←2つ目
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
周辺テキスト:PGroonga
SELECT
pgroonga_snippet_html(
content,
-- クエリーから対象キーワードを抽出
pgroonga_query_extract_keywords('検索 高速'))
FROM entries
WHERE title &@~ '検索 高速' OR
content &@~ '検索 高速';
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
周辺テキスト結果例
...<Groonga>で高速全文検索!...
↓
ARRAY[
↓ 1つ目
'ga&gt;で ←タグをエスケープ
<span class="keyword">高速</span>
全文 ↑↓キーワードはclass付け
<span class="keyword">検索/span>!',
'...' ← 2つ目
]
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
入力補完
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
入力補完
実装方法
以下の検索のOR
ヨミガナでの前方一致検索
緩い全文検索
表示文字列でソートして提示
https://pgroonga.github.io/ja/how-to/auto-complete.html
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
入力補完:Mroonga
テーブル定義:補完候補
CREATE TABLE terms (
term varchar(256), -- 補完候補
reading varchar(256), -- ヨミガナ
PRIMARY KEY (term, reading),
FULLTEXT INDEX (term) -- 候補全文検索用
-- 緩い全文検索用トークナイザー
COMMENT 'tokenizer "TokenBigramSplitSymbolAlpha"',
FULLTEXT INDEX (reading) -- ヨミガナ前方一致用
COMMENT 'normalizer "NormalizerAuto",
tokenizer "off"' -- トークナイザー不要
) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4;
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
入力補完:Mroonga
データ例
INSERT INTO terms VALUES (
'牛乳', -- 補完候補
'ギュウニュウ' --ヨミガナはカタカナで指定
);
INSERT INTO terms VALUES (
'牛乳',
'ミルク' -- 「ミルク」でも補完できるように
);
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
入力補完:Mroonga
データ管理のポイント
普通のテーブルなので管理が楽
追加・削除・更新が楽
ダンプ・リストアもいつも通り
レプリケーションもいつも通り
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
入力補完:Mroonga
検索方法
SELECT DISTINCT(term) FROM terms
WHERE MATCH (reading) -- ヨミガナ前方一致検索
AGAINST (CONCAT('*SS prefix_rk_search(reading, ',
mroonga_escape(${入力} AS script),
')') IN BOOLEAN MODE) OR
MATCH (term) -- 候補を緩く全文検索
AGAINST (CONCAT('*D+ ', mroonga_escape(${入力})))
IN BOOLEAN MODE)
ORDER BY term LIMIT 10; -- ソート
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
入力補完:Mroonga
検索例:漢字1
-- ユーザーが「牛」を入力した場合
SELECT DISTINCT(term) FROM terms
WHERE MATCH (reading) -- ヨミガナ前方一致検索
AGAINST (CONCAT('*SS prefix_rk_search(reading, ',
mroonga_escape('牛' AS script),
')') IN BOOLEAN MODE) OR
MATCH (term) -- 候補を緩く全文検索(ヒット)
AGAINST (CONCAT('*D+ ', mroonga_escape('牛')))
IN BOOLEAN MODE)
ORDER BY term LIMIT 10; -- ソート
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
入力補完:Mroonga
検索例:漢字2
-- ユーザーが「乳」を入力した場合
SELECT DISTINCT(term) FROM terms
WHERE MATCH (reading) -- ヨミガナ前方一致検索
AGAINST (CONCAT('*SS prefix_rk_search(reading, ',
mroonga_escape('乳' AS script),
')') IN BOOLEAN MODE) OR
MATCH (term) -- 候補を緩く全文検索(ヒット)
AGAINST (CONCAT('*D+ ', mroonga_escape('乳')))
IN BOOLEAN MODE)
ORDER BY term LIMIT 10; -- ソート
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
入力補完
検索例:カタカナ
-- ユーザーが「ギュウ」を入力した場合
SELECT DISTINCT(term) FROM terms
WHERE MATCH (reading) -- ヨミガナ前方一致検索(ヒット)
AGAINST (CONCAT('*SS prefix_rk_search(reading, ',
mroonga_escape('ギュウ' AS script),
')') IN BOOLEAN MODE) OR
MATCH (term) -- 候補を緩く全文検索
AGAINST (CONCAT('*D+ ', mroonga_escape('ギュウ')))
IN BOOLEAN MODE)
ORDER BY term LIMIT 10; -- ソート
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
入力補完
検索例:ひらがな
-- ユーザーが「ぎゅう」を入力した場合
SELECT DISTINCT(term) FROM terms
WHERE MATCH (reading) -- ヨミガナ前方一致検索(ヒット)
AGAINST (CONCAT('*SS prefix_rk_search(reading, ',
mroonga_escape('ぎゅう' AS script),
')') IN BOOLEAN MODE) OR
MATCH (term) -- 候補を緩く全文検索
AGAINST (CONCAT('*D+ ', mroonga_escape('ぎゅう')))
IN BOOLEAN MODE)
ORDER BY term LIMIT 10; -- ソート
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
入力補完:Mroonga
検索例:ローマ字
-- ユーザーが「gyu」を入力した場合
SELECT DISTINCT(term) FROM terms
WHERE MATCH (reading) -- ヨミガナ前方一致検索(ヒット)
AGAINST (CONCAT('*SS prefix_rk_search(reading, ',
mroonga_escape('gyu' AS script),
')') IN BOOLEAN MODE) OR
MATCH (term) -- 候補を緩く全文検索
AGAINST (CONCAT('*D+ ', mroonga_escape('gyu')))
IN BOOLEAN MODE)
ORDER BY term LIMIT 10; -- ソート
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
入力補完:PGroonga
テーブル定義
CREATE TABLE terms (
-- 補完候補
term text,
-- この候補のヨミガナ(N個可)
readings text[]
);
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
入力補完:PGroonga
データ例
INSERT INTO terms VALUES (
'牛乳', -- 補完候補
ARRAY[
-- ヨミガナはカタカナで指定する
'ギュウニュウ',
-- 「ミルク」でも補完できるようになる
'ミルク'
]
);
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
入力補完:PGroonga
データ管理のポイント
普通のテーブルなので管理が楽
追加・削除・更新が楽
ダンプ・リストアもいつも通り
レプリケーションもいつも通り
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
入力補完:PGroonga
前方一致用インデックス
CREATE INDEX prefix_search ON terms
USING PGroonga
-- ...text_array_term_search...
(readings pgroonga_text_array_term_search_ops_v2);
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
入力補完:PGroonga
緩い全文検索用
CREATE INDEX loose_search ON terms
USING PGroonga (term)
-- 緩い全文検索用トークナイザー
WITH (tokenizer='TokenBigramSplitSymbolAlphaDigit');
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
入力補完:PGroonga
検索方法
SELECT term FROM terms
-- ヨミガナで前方一致検索
WHERE readings &^~ '${入力}' OR
-- 緩い全文検索
term &@ '${入力}'
ORDER BY term LIMIT 10; -- ソート
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
入力補完:PGroonga
検索例:漢字1
-- ユーザーが「牛」を入力した場合
SELECT term FROM terms
-- ヨミガナで前方一致検索
WHERE readings &^~ '牛' OR
-- 緩い全文検索(ヒット)
term &@ '牛'
ORDER BY term LIMIT 10; -- ソート
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
入力補完:PGroonga
検索例:漢字2
-- ユーザーが「乳」を入力した場合
SELECT term FROM terms
-- ヨミガナで前方一致検索
WHERE readings &^~ '乳' OR
-- 緩い全文検索(ヒット)
term &@ '乳'
ORDER BY term LIMIT 10; -- ソート
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
入力補完:PGroonga
検索例:カタカナ
-- ユーザーが「ギュウ」を入力した場合
SELECT term FROM terms
-- ヨミガナで前方一致検索(ヒット)
WHERE readings &^~ 'ギュウ' OR
-- 緩い全文検索
term &@ 'ギュウ'
ORDER BY term LIMIT 10; -- ソート
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
入力補完:PGroonga
検索例:ひらがな
-- ユーザーが「ぎゅう」を入力した場合
SELECT term FROM terms
-- ヨミガナで前方一致検索(ヒット)
WHERE readings &^~ 'ぎゅう' OR
-- 緩い全文検索
term &@ 'ぎゅう'
ORDER BY term LIMIT 10; -- ソート
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
入力補完:PGroonga
検索例:ローマ字
-- ユーザーが「gyu」を入力した場合
SELECT term FROM terms
-- ヨミガナで前方一致検索(ヒット)
WHERE readings &^~ 'gyu' OR
-- 緩い全文検索
term &@ 'gyu'
ORDER BY term LIMIT 10; -- ソート
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
同義語展開
同義語
同じ意味だが表記が異なる語
例:「刺身」と「お造り」
どの表記でもヒットして欲しい
同義語展開→同義語すべてでOR検索
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
同義語展開
実装方法
同義語管理テーブルを作成
クエリー内の同義語を展開
展開後のクエリーで検索
https://pgroonga.github.io/ja/reference/functions/
pgroonga-query-expand.html
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
同義語展開:Mroonga
テーブル定義
CREATE TABLE synonyms (
term varchar(255), -- 展開対象の語
synonym varchar(255), -- 同義語
INDEX (term) -- 高速化と精度向上
COMMENT 'normalizer "NormalizerAuto"'
) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4;
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
同義語展開
データ例
INSERT INTO synonyms
-- 「刺身」を「刺身 OR お造り」に展開
VALUES ('刺身', '刺身'),
('刺身', 'お造り'),
-- 「お造り」を「お造り OR 刺身」に展開
('お造り', 'お造り'),
('お造り', '刺身');
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
同義語展開
データ管理のポイント
普通のテーブルなので管理が楽
追加・削除・更新が楽
ダンプ・リストアもいつも通り
レプリケーションもいつも通り
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
同義語展開:Mroonga
確認方法
SELECT mroonga_query_expand(
'synonyms', -- テーブル名
'term', -- 展開対象のカラム名
'synonym', -- 対応する同義語のカラム名
'居酒屋 刺身' -- クエリー
);
-- '居酒屋 ((刺身) OR (お造り))'
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
同義語展開:Mroonga
検索方法
SELECT title FROM entries
WHERE
MATCH (title)
-- '*D+ 居酒屋 OR ((刺身) OR (お造り))'になる
AGAINST (mroonga_query_expand('synonyms',
'term',
'synonym',
'*D+ 居酒屋 刺身')
IN BOOLEAN MODE);
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
同義語展開:PGroonga
テーブル定義
CREATE TABLE synonyms (
-- 展開対象の語
term text,
-- 同義語のリスト
-- term自身も含める
-- 含めない場合はtermが検索禁止語になる
terms text[]
);
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
同義語展開:PGroonga
データ例
INSERT INTO synonyms
VALUES ('刺身', -- 「刺身」を展開
ARRAY['刺身', 'お造り']),
('お造り', -- 「お造り」を展開
ARRAY['お造り', '刺身']);
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
同義語展開:PGroonga
データ管理のポイント
普通のテーブルなので管理が楽
追加・削除・更新が楽
ダンプ・リストアもいつも通り
レプリケーションもいつも通り
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
同義語展開:PGroonga
インデックス定義
CREATE INDEX synonym_search ON synonyms
USING PGroonga
-- ...text_term_search...
-- termで完全一致検索をするため
(term pgroonga_text_term_search_ops_v2);
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
同義語展開:PGroonga
確認方法
SELECT pgroonga_query_expand(
'synonyms', -- テーブル名
'term', -- 展開対象のカラム名
'terms', -- 対応する同義語配列のカラム名
'刺身' -- クエリー
);
-- '((刺身) OR (お造り))'
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
同義語展開:PGroonga
検索方法
SELECT title FROM entries
WHERE
-- title &@~ '居酒屋 ((刺身) OR (お造り))'になる
title &@~
pgroonga_query_expand('synonyms',
'term',
'terms',
'居酒屋 刺身');
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
類似文書検索
検索クエリーは文書そのもの
キーワードではない
関連エントリーの提示に使える
メタデータがあるなら組み合わせる
→精度向上
メタデータ:タグ・行動履歴など
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
類似文書検索:Mroonga
インデックス定義
CREATE TABLE entries (
-- ...
FULLTEXT INDEX (content)
-- TokenMecabを使わないと精度がでない
-- 必要なときだけカスタマイズ!
COMMENT 'tokenizer "TokenMecab"'
) -- ...
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
類似文書検索:Mroonga
検索方法
SELECT title
FROM entries
WHERE
MATCH (content)
-- ↓ 既存文書の内容をそのまま指定
AGAINST ('...Groongaで高速全文検索!...'
IN NATURAL LANGUAGE MODE);
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
類似文書検索:Mroonga
結果例
クエリー:
...Groongaで高速全文検索!...
ヒット例:
...Mroongaで高速全文検索!...
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
照合順序:COLLATION
文字の並び順の規則
文字が同一かどうかの判定にも利用
適切な日本語規則なし
いわゆる = 問題
MySQL 8では適切な日本語規則が追加される
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
Mroongaの照合順序
MySQL互換のもの
MySQL互換を微調整したもの
日本語でもいい感じ
Groonga提供のもの
日本語でもいい感じ
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
微調整した照合順序
FULLTEXT INDEX (content)
COMMENT 'normalizer "${ノーマライザー名}"'
ノーマライザー名:
NormalizerMySQLUnicode520CI
ExceptKanaCI
KanaWithVoicedSoundMark
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
類似文書検索:PGroonga
インデックス定義
CREATE INDEX entries_similar_search
ON entries
USING PGroonga (id, content)
-- TokenMecabを使うと精度向上
WITH (tokenizer='TokenMecab');
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
類似文書検索:PGroonga
検索方法
SELECT title
FROM entries
WHERE
-- &@*で類似文書検索
-- 既存文書の内容をそのまま指定
content &@*
'...Groongaで高速全文検索!...';
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
類似文書検索:PGroonga
結果例
クエリー:
...Groongaで高速全文検索!...
ヒット例:
...PGroongaで高速全文検索!...
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
全文検索システムの実装
まとめ
全文検索
キーワードハイライト
周辺テキスト表示
入力補完・同義語展開
関連文書の表示
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
全文検索システムの実装
次の一歩
構造化データ対応
オフィス文書・HTMLなど
対応に必要な処理
テキスト抽出
メタデータ抽出(例:タイトル・更新日時)
スクリーンショット作成(なおよい)
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
抽出ツール
Apache Tika
Apache Luceneのサブプロジェクト
対応フォーマット数が多い
ChupaText
Groongaのサブプロジェクト
スクリーンショット作成対応
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
ChupaText
対応フォーマット
Word/Excel/PowerPoint
ODT/ODS/ODP(OpenDocument)
PDF/HTML/XML/CSV/...
インターフェイス
HTTPとコマンドライン
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
ChupaText:インストール
DockerかVagrantを使うのが楽
https://github.com/ranguba/chupa-text-docker
https://github.com/ranguba/chupa-text-vagrant
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
ChupaText:Docker
% GITHUB=https://github.com
% git clone 
${GITHUB}/ranguba/chupa-text-docker.git
% cd chupa-text-docker
% docker-compose up --build
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
ChupaText:使い方
% curl 
--form data=@XXX.pdf 
http://localhost:20080/extraction.json
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
ChupaText:結果例
{
"mime-type": "application/pdf", # 元データのMIMEタイプ
"size": 147159, # メタデータ
...,
"texts": [ # 抽出されたテキスト(N個)
{
"mime-type": "text/plain", # 抽出後のMIMEタイプ
...,
"creator": "Adobe Illustrator CS3", # メタデータ
"body": "This is sample PDF. ...", # 抽出したテキスト
"screenshot": {
"mime-type": "image/png", # スクリーンショットのMIMEタイプ
"data": "iVBORw...", # Base64にした画像データ
"encoding": "base64" # Base64であることを明記
}
}
]
}
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
ChupaText:Web UI
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
ChupaText:Web UI抽出例
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
ChupaText:Web UI抽出例
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
ChupaText:Vagrant
% GITHUB=https://github.com
% git clone 
${GITHUB}/ranguba/chupa-text-vagrant.git
% cd chupa-text-vagrant
% vagrant up
使い方はDocker版と同じ
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
ChupaText:活用例
抽出したテキスト
Mroonga・PGroongaへ挿入
抽出したメタデータ
Mroonga・PGroongaへ挿入
絞り込みに活用
作成したスクリーンショット
検索結果表示時に掲載
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
まとめ
RDBMS経由で全文検索エンジン
採用の判断材料を提供
全文検索システム実装例を紹介
Mroonga・PGroonga両方
構造化データの対応方法を紹介
ChupaText
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
扱わなかった話題
運用について
障害対策・レプリケーション
チューニング
Groongaの機能を直接使う方法
MySQL・PostgreSQLだけで作る 高速でリッチな全文検索システム Powered by Rabbit 2.2.1
サポートサービス紹介
導入支援(設計支援・性能検証・移行支援・…)
開発支援
(サンプルコード提供・問い合わせ対応・…)
運用支援(障害対応・チューニング支援・…)
問い合わせ先:
https://www.clear-code.com/contact/?
type=groonga

More Related Content

What's hot

20190320 AWS Black Belt Online Seminar Amazon EBS
20190320 AWS Black Belt Online Seminar Amazon EBS20190320 AWS Black Belt Online Seminar Amazon EBS
20190320 AWS Black Belt Online Seminar Amazon EBSAmazon Web Services Japan
 
[AKIBA.AWS] VGWのルーティング仕様
[AKIBA.AWS] VGWのルーティング仕様[AKIBA.AWS] VGWのルーティング仕様
[AKIBA.AWS] VGWのルーティング仕様Shuji Kikuchi
 
202110 AWS Black Belt Online Seminar AWS Site-to-Site VPN
202110 AWS Black Belt Online Seminar AWS Site-to-Site VPN202110 AWS Black Belt Online Seminar AWS Site-to-Site VPN
202110 AWS Black Belt Online Seminar AWS Site-to-Site VPNAmazon Web Services Japan
 
20190522 AWS Black Belt Online Seminar AWS Step Functions
20190522 AWS Black Belt Online Seminar AWS Step Functions20190522 AWS Black Belt Online Seminar AWS Step Functions
20190522 AWS Black Belt Online Seminar AWS Step FunctionsAmazon Web Services Japan
 
サポート エンジニアが語る、Microsoft Azure を支えるインフラの秘密
サポート エンジニアが語る、Microsoft Azure を支えるインフラの秘密サポート エンジニアが語る、Microsoft Azure を支えるインフラの秘密
サポート エンジニアが語る、Microsoft Azure を支えるインフラの秘密ShuheiUda
 
20191029 AWS Black Belt Online Seminar Elastic Load Balancing (ELB)
20191029 AWS Black Belt Online Seminar Elastic Load Balancing (ELB)20191029 AWS Black Belt Online Seminar Elastic Load Balancing (ELB)
20191029 AWS Black Belt Online Seminar Elastic Load Balancing (ELB)Amazon Web Services Japan
 
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design PatternAWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design PatternAmazon Web Services Japan
 
SQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するかSQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するかShogo Wakayama
 
[よくわかるクラウドデータベース] Amazon RDS for PostgreSQL検証報告
[よくわかるクラウドデータベース] Amazon RDS for PostgreSQL検証報告[よくわかるクラウドデータベース] Amazon RDS for PostgreSQL検証報告
[よくわかるクラウドデータベース] Amazon RDS for PostgreSQL検証報告Amazon Web Services Japan
 
インフラエンジニアのためのcassandra入門
インフラエンジニアのためのcassandra入門インフラエンジニアのためのcassandra入門
インフラエンジニアのためのcassandra入門Akihiro Kuwano
 
一歩先行く Azure Computing シリーズ(全3回) 第2回 Azure VM どれを選ぶの? Azure VM 集中講座
一歩先行く Azure Computing シリーズ(全3回) 第2回 Azure VM どれを選ぶの? Azure VM 集中講座一歩先行く Azure Computing シリーズ(全3回) 第2回 Azure VM どれを選ぶの? Azure VM 集中講座
一歩先行く Azure Computing シリーズ(全3回) 第2回 Azure VM どれを選ぶの? Azure VM 集中講座Minoru Naito
 
Cisco Modeling Labs (CML)を使ってネットワークを学ぼう!(基礎編)配布用
Cisco Modeling Labs (CML)を使ってネットワークを学ぼう!(基礎編)配布用Cisco Modeling Labs (CML)を使ってネットワークを学ぼう!(基礎編)配布用
Cisco Modeling Labs (CML)を使ってネットワークを学ぼう!(基礎編)配布用シスコシステムズ合同会社
 
20191016 AWS Black Belt Online Seminar Amazon Route 53 Resolver
20191016 AWS Black Belt Online Seminar Amazon Route 53 Resolver20191016 AWS Black Belt Online Seminar Amazon Route 53 Resolver
20191016 AWS Black Belt Online Seminar Amazon Route 53 ResolverAmazon Web Services Japan
 
単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介AdvancedTechNight
 
初心者向けWebinar AWS上でのファイルサーバ構築
初心者向けWebinar AWS上でのファイルサーバ構築初心者向けWebinar AWS上でのファイルサーバ構築
初心者向けWebinar AWS上でのファイルサーバ構築Amazon Web Services Japan
 
20200630 AWS Black Belt Online Seminar Amazon Cognito
20200630 AWS Black Belt Online Seminar Amazon Cognito20200630 AWS Black Belt Online Seminar Amazon Cognito
20200630 AWS Black Belt Online Seminar Amazon CognitoAmazon Web Services Japan
 
20210216 AWS Black Belt Online Seminar AWS Database Migration Service
20210216 AWS Black Belt Online Seminar AWS Database Migration Service20210216 AWS Black Belt Online Seminar AWS Database Migration Service
20210216 AWS Black Belt Online Seminar AWS Database Migration ServiceAmazon Web Services Japan
 
Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)
Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)
Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)Noritaka Sekiyama
 
CloudFront経由でのCORS利用
CloudFront経由でのCORS利用CloudFront経由でのCORS利用
CloudFront経由でのCORS利用Yuta Imai
 

What's hot (20)

20190320 AWS Black Belt Online Seminar Amazon EBS
20190320 AWS Black Belt Online Seminar Amazon EBS20190320 AWS Black Belt Online Seminar Amazon EBS
20190320 AWS Black Belt Online Seminar Amazon EBS
 
[AKIBA.AWS] VGWのルーティング仕様
[AKIBA.AWS] VGWのルーティング仕様[AKIBA.AWS] VGWのルーティング仕様
[AKIBA.AWS] VGWのルーティング仕様
 
202110 AWS Black Belt Online Seminar AWS Site-to-Site VPN
202110 AWS Black Belt Online Seminar AWS Site-to-Site VPN202110 AWS Black Belt Online Seminar AWS Site-to-Site VPN
202110 AWS Black Belt Online Seminar AWS Site-to-Site VPN
 
20190522 AWS Black Belt Online Seminar AWS Step Functions
20190522 AWS Black Belt Online Seminar AWS Step Functions20190522 AWS Black Belt Online Seminar AWS Step Functions
20190522 AWS Black Belt Online Seminar AWS Step Functions
 
サポート エンジニアが語る、Microsoft Azure を支えるインフラの秘密
サポート エンジニアが語る、Microsoft Azure を支えるインフラの秘密サポート エンジニアが語る、Microsoft Azure を支えるインフラの秘密
サポート エンジニアが語る、Microsoft Azure を支えるインフラの秘密
 
20191029 AWS Black Belt Online Seminar Elastic Load Balancing (ELB)
20191029 AWS Black Belt Online Seminar Elastic Load Balancing (ELB)20191029 AWS Black Belt Online Seminar Elastic Load Balancing (ELB)
20191029 AWS Black Belt Online Seminar Elastic Load Balancing (ELB)
 
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design PatternAWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
 
SQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するかSQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するか
 
[よくわかるクラウドデータベース] Amazon RDS for PostgreSQL検証報告
[よくわかるクラウドデータベース] Amazon RDS for PostgreSQL検証報告[よくわかるクラウドデータベース] Amazon RDS for PostgreSQL検証報告
[よくわかるクラウドデータベース] Amazon RDS for PostgreSQL検証報告
 
インフラエンジニアのためのcassandra入門
インフラエンジニアのためのcassandra入門インフラエンジニアのためのcassandra入門
インフラエンジニアのためのcassandra入門
 
Infrastructure as Code (IaC) 談義 2022
Infrastructure as Code (IaC) 談義 2022Infrastructure as Code (IaC) 談義 2022
Infrastructure as Code (IaC) 談義 2022
 
一歩先行く Azure Computing シリーズ(全3回) 第2回 Azure VM どれを選ぶの? Azure VM 集中講座
一歩先行く Azure Computing シリーズ(全3回) 第2回 Azure VM どれを選ぶの? Azure VM 集中講座一歩先行く Azure Computing シリーズ(全3回) 第2回 Azure VM どれを選ぶの? Azure VM 集中講座
一歩先行く Azure Computing シリーズ(全3回) 第2回 Azure VM どれを選ぶの? Azure VM 集中講座
 
Cisco Modeling Labs (CML)を使ってネットワークを学ぼう!(基礎編)配布用
Cisco Modeling Labs (CML)を使ってネットワークを学ぼう!(基礎編)配布用Cisco Modeling Labs (CML)を使ってネットワークを学ぼう!(基礎編)配布用
Cisco Modeling Labs (CML)を使ってネットワークを学ぼう!(基礎編)配布用
 
20191016 AWS Black Belt Online Seminar Amazon Route 53 Resolver
20191016 AWS Black Belt Online Seminar Amazon Route 53 Resolver20191016 AWS Black Belt Online Seminar Amazon Route 53 Resolver
20191016 AWS Black Belt Online Seminar Amazon Route 53 Resolver
 
単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介
 
初心者向けWebinar AWS上でのファイルサーバ構築
初心者向けWebinar AWS上でのファイルサーバ構築初心者向けWebinar AWS上でのファイルサーバ構築
初心者向けWebinar AWS上でのファイルサーバ構築
 
20200630 AWS Black Belt Online Seminar Amazon Cognito
20200630 AWS Black Belt Online Seminar Amazon Cognito20200630 AWS Black Belt Online Seminar Amazon Cognito
20200630 AWS Black Belt Online Seminar Amazon Cognito
 
20210216 AWS Black Belt Online Seminar AWS Database Migration Service
20210216 AWS Black Belt Online Seminar AWS Database Migration Service20210216 AWS Black Belt Online Seminar AWS Database Migration Service
20210216 AWS Black Belt Online Seminar AWS Database Migration Service
 
Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)
Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)
Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)
 
CloudFront経由でのCORS利用
CloudFront経由でのCORS利用CloudFront経由でのCORS利用
CloudFront経由でのCORS利用
 

Viewers also liked

Laravelを使ってみた
Laravelを使ってみたLaravelを使ってみた
Laravelを使ってみたJaeseop Jeong
 
わかってるフレームワーク Laravel
わかってるフレームワーク Laravelわかってるフレームワーク Laravel
わかってるフレームワーク LaravelMasashi Shinbara
 
Phpフレームワーク 「laravel」でブログを作ろう
Phpフレームワーク 「laravel」でブログを作ろうPhpフレームワーク 「laravel」でブログを作ろう
Phpフレームワーク 「laravel」でブログを作ろうSyouta Tada
 
[Laravel] CRUDアプリから一歩踏み出す3つのアプローチ
[Laravel] CRUDアプリから一歩踏み出す3つのアプローチ[Laravel] CRUDアプリから一歩踏み出す3つのアプローチ
[Laravel] CRUDアプリから一歩踏み出す3つのアプローチKazuaki KURIU
 
レイヤードアーキテクチャを意識したPHPアプリケーションの構築
レイヤードアーキテクチャを意識したPHPアプリケーションの構築レイヤードアーキテクチャを意識したPHPアプリケーションの構築
レイヤードアーキテクチャを意識したPHPアプリケーションの構築Masashi Shinbara
 
JavaScriptから利用するFirebase
JavaScriptから利用するFirebaseJavaScriptから利用するFirebase
JavaScriptから利用するFirebaseTakuji Shimokawa
 
カスタムトランジションやジェスチャーを生かしたUIの実装ポイント
カスタムトランジションやジェスチャーを生かしたUIの実装ポイントカスタムトランジションやジェスチャーを生かしたUIの実装ポイント
カスタムトランジションやジェスチャーを生かしたUIの実装ポイントFumiya Sakai
 
指の動きや遷移時等のアニメーションを生かしたUIのサンプル解説
指の動きや遷移時等のアニメーションを生かしたUIのサンプル解説指の動きや遷移時等のアニメーションを生かしたUIのサンプル解説
指の動きや遷移時等のアニメーションを生かしたUIのサンプル解説Fumiya Sakai
 
デザイナーがXcodeを使って 開発効率をUPさせた 5つのエピソード + 現場エンジニアのコメント付き
デザイナーがXcodeを使って 開発効率をUPさせた 5つのエピソード  +  現場エンジニアのコメント付きデザイナーがXcodeを使って 開発効率をUPさせた 5つのエピソード  +  現場エンジニアのコメント付き
デザイナーがXcodeを使って 開発効率をUPさせた 5つのエピソード + 現場エンジニアのコメント付きMayumi Narisawa
 
デザインにもこだわったUiの事始め3
デザインにもこだわったUiの事始め3デザインにもこだわったUiの事始め3
デザインにもこだわったUiの事始め3Fumiya Sakai
 
Firebaseで驚くほど簡単に作れるリアルタイムイベントドリブンアプリ
Firebaseで驚くほど簡単に作れるリアルタイムイベントドリブンアプリFirebaseで驚くほど簡単に作れるリアルタイムイベントドリブンアプリ
Firebaseで驚くほど簡単に作れるリアルタイムイベントドリブンアプリFumihiko Shiroyama
 
Firebaseでのファイルアップロード処理と便利ライブラリの紹介
Firebaseでのファイルアップロード処理と便利ライブラリの紹介Firebaseでのファイルアップロード処理と便利ライブラリの紹介
Firebaseでのファイルアップロード処理と便利ライブラリの紹介Fumiya Sakai
 
Laravel の学び方と得られる学び
Laravel の学び方と得られる学びLaravel の学び方と得られる学び
Laravel の学び方と得られる学びMasaru Matsuo
 
Laravelチュートリアルを作ってみた。
Laravelチュートリアルを作ってみた。Laravelチュートリアルを作ってみた。
Laravelチュートリアルを作ってみた。Futoshi Endo
 
ビルドサーバで使うDocker
ビルドサーバで使うDockerビルドサーバで使うDocker
ビルドサーバで使うDockerMasashi Shinbara
 
PHPでPostgreSQLとPGroongaを使って高速日本語全文検索!
 PHPでPostgreSQLとPGroongaを使って高速日本語全文検索! PHPでPostgreSQLとPGroongaを使って高速日本語全文検索!
PHPでPostgreSQLとPGroongaを使って高速日本語全文検索!Kouhei Sutou
 
アプリチームを支えるSlack bot
アプリチームを支えるSlack botアプリチームを支えるSlack bot
アプリチームを支えるSlack botKazuaki KURIU
 
Laravel / Lumen 次の一歩
Laravel / Lumen 次の一歩Laravel / Lumen 次の一歩
Laravel / Lumen 次の一歩Yuuki Takezawa
 

Viewers also liked (20)

Laravelを使ってみた
Laravelを使ってみたLaravelを使ってみた
Laravelを使ってみた
 
わかってるフレームワーク Laravel
わかってるフレームワーク Laravelわかってるフレームワーク Laravel
わかってるフレームワーク Laravel
 
Phpフレームワーク 「laravel」でブログを作ろう
Phpフレームワーク 「laravel」でブログを作ろうPhpフレームワーク 「laravel」でブログを作ろう
Phpフレームワーク 「laravel」でブログを作ろう
 
3 tips of Laravel
3 tips of Laravel3 tips of Laravel
3 tips of Laravel
 
[Laravel] CRUDアプリから一歩踏み出す3つのアプローチ
[Laravel] CRUDアプリから一歩踏み出す3つのアプローチ[Laravel] CRUDアプリから一歩踏み出す3つのアプローチ
[Laravel] CRUDアプリから一歩踏み出す3つのアプローチ
 
レイヤードアーキテクチャを意識したPHPアプリケーションの構築
レイヤードアーキテクチャを意識したPHPアプリケーションの構築レイヤードアーキテクチャを意識したPHPアプリケーションの構築
レイヤードアーキテクチャを意識したPHPアプリケーションの構築
 
JavaScriptから利用するFirebase
JavaScriptから利用するFirebaseJavaScriptから利用するFirebase
JavaScriptから利用するFirebase
 
カスタムトランジションやジェスチャーを生かしたUIの実装ポイント
カスタムトランジションやジェスチャーを生かしたUIの実装ポイントカスタムトランジションやジェスチャーを生かしたUIの実装ポイント
カスタムトランジションやジェスチャーを生かしたUIの実装ポイント
 
指の動きや遷移時等のアニメーションを生かしたUIのサンプル解説
指の動きや遷移時等のアニメーションを生かしたUIのサンプル解説指の動きや遷移時等のアニメーションを生かしたUIのサンプル解説
指の動きや遷移時等のアニメーションを生かしたUIのサンプル解説
 
デザイナーがXcodeを使って 開発効率をUPさせた 5つのエピソード + 現場エンジニアのコメント付き
デザイナーがXcodeを使って 開発効率をUPさせた 5つのエピソード  +  現場エンジニアのコメント付きデザイナーがXcodeを使って 開発効率をUPさせた 5つのエピソード  +  現場エンジニアのコメント付き
デザイナーがXcodeを使って 開発効率をUPさせた 5つのエピソード + 現場エンジニアのコメント付き
 
デザインにもこだわったUiの事始め3
デザインにもこだわったUiの事始め3デザインにもこだわったUiの事始め3
デザインにもこだわったUiの事始め3
 
Laravel LT
Laravel LTLaravel LT
Laravel LT
 
Firebaseで驚くほど簡単に作れるリアルタイムイベントドリブンアプリ
Firebaseで驚くほど簡単に作れるリアルタイムイベントドリブンアプリFirebaseで驚くほど簡単に作れるリアルタイムイベントドリブンアプリ
Firebaseで驚くほど簡単に作れるリアルタイムイベントドリブンアプリ
 
Firebaseでのファイルアップロード処理と便利ライブラリの紹介
Firebaseでのファイルアップロード処理と便利ライブラリの紹介Firebaseでのファイルアップロード処理と便利ライブラリの紹介
Firebaseでのファイルアップロード処理と便利ライブラリの紹介
 
Laravel の学び方と得られる学び
Laravel の学び方と得られる学びLaravel の学び方と得られる学び
Laravel の学び方と得られる学び
 
Laravelチュートリアルを作ってみた。
Laravelチュートリアルを作ってみた。Laravelチュートリアルを作ってみた。
Laravelチュートリアルを作ってみた。
 
ビルドサーバで使うDocker
ビルドサーバで使うDockerビルドサーバで使うDocker
ビルドサーバで使うDocker
 
PHPでPostgreSQLとPGroongaを使って高速日本語全文検索!
 PHPでPostgreSQLとPGroongaを使って高速日本語全文検索! PHPでPostgreSQLとPGroongaを使って高速日本語全文検索!
PHPでPostgreSQLとPGroongaを使って高速日本語全文検索!
 
アプリチームを支えるSlack bot
アプリチームを支えるSlack botアプリチームを支えるSlack bot
アプリチームを支えるSlack bot
 
Laravel / Lumen 次の一歩
Laravel / Lumen 次の一歩Laravel / Lumen 次の一歩
Laravel / Lumen 次の一歩
 

Similar to MySQL・PostgreSQLだけで作る高速でリッチな全文検索システム

MySQLとPostgreSQLと日本語全文検索 - Azure DatabaseでMroonga・PGroongaを使いたいですよね!?
MySQLとPostgreSQLと日本語全文検索 - Azure DatabaseでMroonga・PGroongaを使いたいですよね!?MySQLとPostgreSQLと日本語全文検索 - Azure DatabaseでMroonga・PGroongaを使いたいですよね!?
MySQLとPostgreSQLと日本語全文検索 - Azure DatabaseでMroonga・PGroongaを使いたいですよね!?Kouhei Sutou
 
PGroonga 2 - PostgreSQLでの全文検索の決定版
PGroonga 2 - PostgreSQLでの全文検索の決定版PGroonga 2 - PostgreSQLでの全文検索の決定版
PGroonga 2 - PostgreSQLでの全文検索の決定版Kouhei Sutou
 
MySQL・PostgreSQL上で動かす全文検索エンジン「Groonga」セミナー
MySQL・PostgreSQL上で動かす全文検索エンジン「Groonga」セミナーMySQL・PostgreSQL上で動かす全文検索エンジン「Groonga」セミナー
MySQL・PostgreSQL上で動かす全文検索エンジン「Groonga」セミナーKouhei Sutou
 
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システムMySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システムKouhei Sutou
 
いろいろ考えると日本語の全文検索もMySQLがいいね!
いろいろ考えると日本語の全文検索もMySQLがいいね!いろいろ考えると日本語の全文検索もMySQLがいいね!
いろいろ考えると日本語の全文検索もMySQLがいいね!Kouhei Sutou
 
MariaDBとMroongaで作る全言語対応超高速全文検索システム
MariaDBとMroongaで作る全言語対応超高速全文検索システムMariaDBとMroongaで作る全言語対応超高速全文検索システム
MariaDBとMroongaで作る全言語対応超高速全文検索システムKouhei Sutou
 
MroongaとPGroonga
MroongaとPGroongaMroongaとPGroonga
MroongaとPGroongaKouhei Sutou
 
PostgreSQLとPGroongaで作るPHPマニュアル高速全文検索システム
PostgreSQLとPGroongaで作るPHPマニュアル高速全文検索システムPostgreSQLとPGroongaで作るPHPマニュアル高速全文検索システム
PostgreSQLとPGroongaで作るPHPマニュアル高速全文検索システムKouhei Sutou
 
初心者向けMroonga・PGroonga情報
初心者向けMroonga・PGroonga情報初心者向けMroonga・PGroonga情報
初心者向けMroonga・PGroonga情報Kouhei Sutou
 
ニコニコニュースと全文検索
ニコニコニュースと全文検索ニコニコニュースと全文検索
ニコニコニュースと全文検索techtalkdwango
 
Mroonga・PGroonga導入方法
Mroonga・PGroonga導入方法Mroonga・PGroonga導入方法
Mroonga・PGroonga導入方法Kouhei Sutou
 
アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会
アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会
アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会Satoshi Nagayasu
 
PostgreSQLでpg_bigmを使って日本語全文検索 (MySQLとPostgreSQLの日本語全文検索勉強会 発表資料)
PostgreSQLでpg_bigmを使って日本語全文検索 (MySQLとPostgreSQLの日本語全文検索勉強会 発表資料)PostgreSQLでpg_bigmを使って日本語全文検索 (MySQLとPostgreSQLの日本語全文検索勉強会 発表資料)
PostgreSQLでpg_bigmを使って日本語全文検索 (MySQLとPostgreSQLの日本語全文検索勉強会 発表資料)NTT DATA OSS Professional Services
 
PostgreSQLレプリケーション(pgcon17j_t4)
PostgreSQLレプリケーション(pgcon17j_t4)PostgreSQLレプリケーション(pgcon17j_t4)
PostgreSQLレプリケーション(pgcon17j_t4)Kosuke Kida
 
JTF2021w F3 postgresql frontline
JTF2021w F3 postgresql frontlineJTF2021w F3 postgresql frontline
JTF2021w F3 postgresql frontlineHaruka Takatsuka
 
第51回NDS PostgreSQLのデータ型 #nds51
第51回NDS PostgreSQLのデータ型 #nds51第51回NDS PostgreSQLのデータ型 #nds51
第51回NDS PostgreSQLのデータ型 #nds51civicpg
 
20190314 PGStrom Arrow_Fdw
20190314 PGStrom Arrow_Fdw20190314 PGStrom Arrow_Fdw
20190314 PGStrom Arrow_FdwKohei KaiGai
 

Similar to MySQL・PostgreSQLだけで作る高速でリッチな全文検索システム (20)

MySQLとPostgreSQLと日本語全文検索 - Azure DatabaseでMroonga・PGroongaを使いたいですよね!?
MySQLとPostgreSQLと日本語全文検索 - Azure DatabaseでMroonga・PGroongaを使いたいですよね!?MySQLとPostgreSQLと日本語全文検索 - Azure DatabaseでMroonga・PGroongaを使いたいですよね!?
MySQLとPostgreSQLと日本語全文検索 - Azure DatabaseでMroonga・PGroongaを使いたいですよね!?
 
PGroonga 2 - PostgreSQLでの全文検索の決定版
PGroonga 2 - PostgreSQLでの全文検索の決定版PGroonga 2 - PostgreSQLでの全文検索の決定版
PGroonga 2 - PostgreSQLでの全文検索の決定版
 
MySQL・PostgreSQL上で動かす全文検索エンジン「Groonga」セミナー
MySQL・PostgreSQL上で動かす全文検索エンジン「Groonga」セミナーMySQL・PostgreSQL上で動かす全文検索エンジン「Groonga」セミナー
MySQL・PostgreSQL上で動かす全文検索エンジン「Groonga」セミナー
 
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システムMySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
 
PGroongaの実装
PGroongaの実装PGroongaの実装
PGroongaの実装
 
いろいろ考えると日本語の全文検索もMySQLがいいね!
いろいろ考えると日本語の全文検索もMySQLがいいね!いろいろ考えると日本語の全文検索もMySQLがいいね!
いろいろ考えると日本語の全文検索もMySQLがいいね!
 
Groonga族2015
Groonga族2015Groonga族2015
Groonga族2015
 
MariaDBとMroongaで作る全言語対応超高速全文検索システム
MariaDBとMroongaで作る全言語対応超高速全文検索システムMariaDBとMroongaで作る全言語対応超高速全文検索システム
MariaDBとMroongaで作る全言語対応超高速全文検索システム
 
MroongaとPGroonga
MroongaとPGroongaMroongaとPGroonga
MroongaとPGroonga
 
PostgreSQLとPGroongaで作るPHPマニュアル高速全文検索システム
PostgreSQLとPGroongaで作るPHPマニュアル高速全文検索システムPostgreSQLとPGroongaで作るPHPマニュアル高速全文検索システム
PostgreSQLとPGroongaで作るPHPマニュアル高速全文検索システム
 
初心者向けMroonga・PGroonga情報
初心者向けMroonga・PGroonga情報初心者向けMroonga・PGroonga情報
初心者向けMroonga・PGroonga情報
 
ニコニコニュースと全文検索
ニコニコニュースと全文検索ニコニコニュースと全文検索
ニコニコニュースと全文検索
 
Mroonga・PGroonga導入方法
Mroonga・PGroonga導入方法Mroonga・PGroonga導入方法
Mroonga・PGroonga導入方法
 
アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会
アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会
アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会
 
全文検索入門
全文検索入門全文検索入門
全文検索入門
 
PostgreSQLでpg_bigmを使って日本語全文検索 (MySQLとPostgreSQLの日本語全文検索勉強会 発表資料)
PostgreSQLでpg_bigmを使って日本語全文検索 (MySQLとPostgreSQLの日本語全文検索勉強会 発表資料)PostgreSQLでpg_bigmを使って日本語全文検索 (MySQLとPostgreSQLの日本語全文検索勉強会 発表資料)
PostgreSQLでpg_bigmを使って日本語全文検索 (MySQLとPostgreSQLの日本語全文検索勉強会 発表資料)
 
PostgreSQLレプリケーション(pgcon17j_t4)
PostgreSQLレプリケーション(pgcon17j_t4)PostgreSQLレプリケーション(pgcon17j_t4)
PostgreSQLレプリケーション(pgcon17j_t4)
 
JTF2021w F3 postgresql frontline
JTF2021w F3 postgresql frontlineJTF2021w F3 postgresql frontline
JTF2021w F3 postgresql frontline
 
第51回NDS PostgreSQLのデータ型 #nds51
第51回NDS PostgreSQLのデータ型 #nds51第51回NDS PostgreSQLのデータ型 #nds51
第51回NDS PostgreSQLのデータ型 #nds51
 
20190314 PGStrom Arrow_Fdw
20190314 PGStrom Arrow_Fdw20190314 PGStrom Arrow_Fdw
20190314 PGStrom Arrow_Fdw
 

More from Kouhei Sutou

RubyKaigi 2022 - Fast data processing with Ruby and Apache Arrow
RubyKaigi 2022 - Fast data processing with Ruby and Apache ArrowRubyKaigi 2022 - Fast data processing with Ruby and Apache Arrow
RubyKaigi 2022 - Fast data processing with Ruby and Apache ArrowKouhei Sutou
 
Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021
Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021
Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021Kouhei Sutou
 
RubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache Arrow
RubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache ArrowRubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache Arrow
RubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache ArrowKouhei Sutou
 
Rubyと仕事と自由なソフトウェア
Rubyと仕事と自由なソフトウェアRubyと仕事と自由なソフトウェア
Rubyと仕事と自由なソフトウェアKouhei Sutou
 
Apache Arrowフォーマットはなぜ速いのか
Apache Arrowフォーマットはなぜ速いのかApache Arrowフォーマットはなぜ速いのか
Apache Arrowフォーマットはなぜ速いのかKouhei Sutou
 
Apache Arrow 1.0 - A cross-language development platform for in-memory data
Apache Arrow 1.0 - A cross-language development platform for in-memory dataApache Arrow 1.0 - A cross-language development platform for in-memory data
Apache Arrow 1.0 - A cross-language development platform for in-memory dataKouhei Sutou
 
Redmine検索の未来像
Redmine検索の未来像Redmine検索の未来像
Redmine検索の未来像Kouhei Sutou
 
Apache Arrow - A cross-language development platform for in-memory data
Apache Arrow - A cross-language development platform for in-memory dataApache Arrow - A cross-language development platform for in-memory data
Apache Arrow - A cross-language development platform for in-memory dataKouhei Sutou
 
Better CSV processing with Ruby 2.6
Better CSV processing with Ruby 2.6Better CSV processing with Ruby 2.6
Better CSV processing with Ruby 2.6Kouhei Sutou
 
Apache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォームApache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォームKouhei Sutou
 
MySQL 8.0でMroonga
MySQL 8.0でMroongaMySQL 8.0でMroonga
MySQL 8.0でMroongaKouhei Sutou
 
Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!
Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!
Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!Kouhei Sutou
 
PGroonga 2 – Make PostgreSQL rich full text search system backend!
PGroonga 2 – Make PostgreSQL rich full text search system backend!PGroonga 2 – Make PostgreSQL rich full text search system backend!
PGroonga 2 – Make PostgreSQL rich full text search system backend!Kouhei Sutou
 
Improve extension API: C++ as better language for extension
Improve extension API: C++ as better language for extensionImprove extension API: C++ as better language for extension
Improve extension API: C++ as better language for extensionKouhei Sutou
 

More from Kouhei Sutou (20)

RubyKaigi 2022 - Fast data processing with Ruby and Apache Arrow
RubyKaigi 2022 - Fast data processing with Ruby and Apache ArrowRubyKaigi 2022 - Fast data processing with Ruby and Apache Arrow
RubyKaigi 2022 - Fast data processing with Ruby and Apache Arrow
 
Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021
Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021
Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021
 
RubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache Arrow
RubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache ArrowRubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache Arrow
RubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache Arrow
 
Rubyと仕事と自由なソフトウェア
Rubyと仕事と自由なソフトウェアRubyと仕事と自由なソフトウェア
Rubyと仕事と自由なソフトウェア
 
Apache Arrowフォーマットはなぜ速いのか
Apache Arrowフォーマットはなぜ速いのかApache Arrowフォーマットはなぜ速いのか
Apache Arrowフォーマットはなぜ速いのか
 
Apache Arrow 1.0 - A cross-language development platform for in-memory data
Apache Arrow 1.0 - A cross-language development platform for in-memory dataApache Arrow 1.0 - A cross-language development platform for in-memory data
Apache Arrow 1.0 - A cross-language development platform for in-memory data
 
Apache Arrow 2019
Apache Arrow 2019Apache Arrow 2019
Apache Arrow 2019
 
Redmine検索の未来像
Redmine検索の未来像Redmine検索の未来像
Redmine検索の未来像
 
Apache Arrow - A cross-language development platform for in-memory data
Apache Arrow - A cross-language development platform for in-memory dataApache Arrow - A cross-language development platform for in-memory data
Apache Arrow - A cross-language development platform for in-memory data
 
Better CSV processing with Ruby 2.6
Better CSV processing with Ruby 2.6Better CSV processing with Ruby 2.6
Better CSV processing with Ruby 2.6
 
Apache Arrow
Apache ArrowApache Arrow
Apache Arrow
 
Apache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォームApache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォーム
 
Apache Arrow
Apache ArrowApache Arrow
Apache Arrow
 
MySQL 8.0でMroonga
MySQL 8.0でMroongaMySQL 8.0でMroonga
MySQL 8.0でMroonga
 
My way with Ruby
My way with RubyMy way with Ruby
My way with Ruby
 
Red Data Tools
Red Data ToolsRed Data Tools
Red Data Tools
 
Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!
Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!
Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!
 
PGroonga 2 – Make PostgreSQL rich full text search system backend!
PGroonga 2 – Make PostgreSQL rich full text search system backend!PGroonga 2 – Make PostgreSQL rich full text search system backend!
PGroonga 2 – Make PostgreSQL rich full text search system backend!
 
Improve extension API: C++ as better language for extension
Improve extension API: C++ as better language for extensionImprove extension API: C++ as better language for extension
Improve extension API: C++ as better language for extension
 
PGroonga & Zulip
PGroonga & ZulipPGroonga & Zulip
PGroonga & Zulip
 

MySQL・PostgreSQLだけで作る高速でリッチな全文検索システム