全文検索エンジン群雄割拠〜あなたが使うべきはどれだ!〜
CROSS 20152015.1.29
Agenda
1.セッション概要
2.スピーカ紹介
3.全文検索を駆け足でおさらい
4.各全文検索エンジンの紹介と質疑&議論
5.全体質疑(時間があれば)
Agenda
1.セッション概要←
2.スピーカ紹介
3.全文検索を駆け足でおさらい
4.各全文検索エンジンの紹介と質疑&議論
5.全体質疑(時間があれば)
Apache Solror
Senna
Apache Solror
Groonga(senna)or
Elasticsearchor
CloudSearchor …
どれ使えばいいの?どこがどう違うの?
そういう訳で、各全文検索エンジンの
中の人や、ヘビーユーザに集まってもらいました
• Elasticsearch
• Elasticsearch大谷さん
•Apache Solr
•クックパッド兼山さん
•Amazon CloudSearch
• ChatWork藤原さん
•Groonga(Mroonga,Rroonga,Nroonga)
•クリアコード須藤さん
本セッションは質疑、議論重視
(ガチ)
尚、本セッションのスライドは近日中に
すべてどこかに上がります
ハッシュタグで告知します
Agenda
1.セッション概要
2.スピーカ紹介←
3.全文検索を駆け足でおさらい
4.各全文検索エンジンの紹介と質疑&議論
5.全体質疑(時間があれば)
Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited
Jun Ohtani
• Me, Jun Ohtani / Technical Adovocate lucene-gosenコミ ッ ター
ElasticSearch Server日本語版の翻訳
elasticsearch-extended-analysisの開発
http://blog.johtani.info
好きな飲み物: プレミ アムモルツ
• Elasticsearch, founded in 2012 Products: Elasticsearch, Logstash, Kibana, Marvel, Shield
Professional services: Support & development subscriptions
cookpad 兼山元太
日々の仕事:
・ 検索の満足度を上げる
・ 検索のバッ クエンド の開発
・ 辞書の作成/管理
・ レシピのメ タデータの作成/管理
・ 他チームの検索関連のお手伝い
夢は世界中で使われる道具を作ること
やまかつ (@yamakatu)
•本名は秘密(うそ
•ヤフー株式会社ヤフオクカンパニー
•検索、統計、機械学習しつつ、メインは育児
•ぶっちゃけ、Groonga族とCloudSearchはまともに使ったことない(キリ
Agenda
1.セッション概要
2.スピーカ紹介
3.全文検索を駆け足でおさらい←
4.各全文検索エンジンの紹介と質疑&議論
5.全体質疑(時間があれば)
この後がマニアックなのでその前に駆け足でおさらい
入力:キーワード
出力:そのキーワードを含むドキュメント
転置インデックスInverted index
と形態素解析とN-Gram
RDBの一般的インデックス
アルゴリズム
B+Tree
RDBの一般的インデックス
アルゴリズム
B+Treeじゃムリ
RDBでインデックスを貼らずに
Select (略) where id = 4
1 4 9 10 11 12 13 15 16 20 25
full scan(ex. 11 times)
ぜんぶで11件
B+Tree(ex. 4 times)
B+TreeでインデクシングSelect (略) where id = 4
4 times < 11 times
データ量が増加すると、差は指数的に増加
しかし、B+Treeで全文検索はむりぽ
「くろす」で全文検索したい場合
Select 略 where text like “%くろす%”
「くろす」で全文検索したい場合
Select 略 where text like “%くろす%”
つまり部分一致
B+Treeでテキストの部分一致を実現しようとしても…
各文字列の中にキーワードが含まれているかどうかはfull scanしてみないとわからない
転置インデックス(簡略)
文書番号 文書
1 今年のCROSSは横浜
2 横浜行くの久しぶり
3 とりあえずモルツ
もと文書
転置インデックス(簡略)
文書番号 文書
1 今年のCROSSは横浜
2 横浜行くの久しぶり
3 とりあえずモルツ
単語 出現文書
横浜 1, 2
の 1, 2
CROSS 1
… …
もと文書転置
インデックス
転置インデックス(簡略)
文書番号 文書
1 今年のCROSSは横浜
2 横浜行くの久しぶり
3 とりあえずモルツ
単語 出現文書
横浜 1, 2
の 1, 2
CROSS 1
… …
もと文書転置
インデックス
「CROSS」で検索
転置インデックス(簡略)
文書番号 文書
1 今年のCROSSは横浜
2 横浜行くの久しぶり
3 とりあえずモルツ
単語 出現文書
横浜 1, 2
の 1, 2
CROSS 1
… …
もと文書転置
インデックス
「CROSS」で検索
転置インデックス(簡略)
文書番号 文書
1 今年のCROSSは横浜
2 横浜行くの久しぶり
3 とりあえずモルツ
単語 出現文書
横浜 1, 2
の 1, 2
CROSS 1
… …
もと文書転置
インデックス
「CROSS」で検索 出現文書:1
転置インデックスを用いて全文検索を実現
補足 1.
最近はRDBでも転置インデックスが実装されてます
MySQL(innoDB, MyISAM):FullTextSearch
PostgreSQL:GIST Index, GIN Index
Oracle:Oracle Text
補足 2.
B+treeでも前方一致検であれば有効
select 略where text like “くろす%”
周辺機能のおさらい
• ハイライト
• スニペット
• ソート
• ページング
• サジェスト
• もしかして
• 絞込(カテゴリ)
• シャーディング
• レプリケーション
周辺機能のおさらい
• ハイライト
• スニペット
• ソート
• ページング
• サジェスト
• もしかして
• 絞込(カテゴリ)
• シャーディング
• レプリケーション
周辺機能のおさらい
• ハイライト
• スニペット
• ソート
• ページング
• サジェスト
• もしかして
• 絞込(カテゴリ)
• シャーディング
• レプリケーション
周辺機能のおさらい
• ハイライト
• スニペット
• ソート
• ページング
• サジェスト
• もしかして
• 絞込(カテゴリ)
• シャーディング
• レプリケーション
周辺機能のおさらい
• ハイライト
• スニペット
• ソート
• ページング
• サジェスト
• もしかして
• 絞込(カテゴリ)
• シャーディング
• レプリケーション
周辺機能のおさらい
• ハイライト
• スニペット
• ソート
• ページング
• サジェスト
• もしかして
• 絞込(カテゴリ)
• シャーディング
• レプリケーション
周辺機能のおさらい
• ハイライト
• スニペット
• ソート
• ページング
• サジェスト
• もしかして
• 絞込(カテゴリ)
• シャーディング
• レプリケーション
周辺機能のおさらい
• ハイライト
• スニペット
• ソート
• ページング
• サジェスト
• もしかして
• 絞込(カテゴリ)
• シャーディング
• レプリケーション
• ハイライト
• スニペット
• ソート
• ページング
• サジェスト
• もしかして
• 絞込(カテゴリ)
• シャーディング
• レプリケーション
周辺機能のおさらいノード1
シャード1台
• ハイライト
• スニペット
• ソート
• ページング
• サジェスト
• もしかして
• 絞込(カテゴリ)
• シャーディング
• レプリケーション
周辺機能のおさらいノード1
シャード1台
ノード2
シャード2
2台
ノード1
シャード1
検索クエリへの応答速度向上インデクシングの高速化
周辺機能のおさらい
• ハイライト
• スニペット
• ソート
• ページング
• サジェスト
• もしかして
• 絞込(カテゴリ)
• シャーディング
• レプリケーション
ノード1
シャード1台
周辺機能のおさらい
• ハイライト
• スニペット
• ソート
• ページング
• サジェスト
• もしかして
• 絞込(カテゴリ)
• シャーディング
• レプリケーション
ノード1
シャード1台
ノード2(slave)
2台
ノード1(master)
検索負荷の分散
シャードシャード
Agenda
1.セッション概要
2.スピーカ紹介
3.全文検索を駆け足でおさらい
4.各全文検索エンジンの紹介と質疑&議論←
5.全体質疑(時間があれば)
• Elasticsearch
• Elasticsearch大谷さん
•Apache Solr
•クックパッド兼山さん
•Amazon CloudSearch
• ChatWork藤原さん
•Groonga(Mroonga,Rroonga,Nroonga)
•クリアコード須藤さん
本セッションは質疑、議論重視
(ガチ)
Twitterでもハッシュタグ(#cross2015_c)付きでつぶやいていただければ
質問拾います
(会場からの質問を優先しますので時間切れしたら、ごめんなさい)