75
全文検索エンジン 群雄割拠 〜あなたが使うべきはどれだ!〜 CROSS 2015 2015.1.29

CROSS 2015 全文検索群雄割拠

Embed Size (px)

Citation preview

全文検索エンジン群雄割拠〜あなたが使うべきはどれだ!〜

CROSS 20152015.1.29

Agenda

1.セッション概要

2.スピーカ紹介

3.全文検索を駆け足でおさらい

4.各全文検索エンジンの紹介と質疑&議論

5.全体質疑(時間があれば)

Agenda

1.セッション概要←

2.スピーカ紹介

3.全文検索を駆け足でおさらい

4.各全文検索エンジンの紹介と質疑&議論

5.全体質疑(時間があれば)

本セッションの狙い

例えば5, 6年前…

「全文検索を使い隊!」

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.全体質疑(時間があれば)

この後がマニアックなのでその前に駆け足でおさらい

全文検索エンジンis 何?

1.全文検索機能

2.周辺機能

1.全文検索機能←

2.周辺機能

全文検索機能のおさらい

入力:キーワード

出力:そのキーワードを含むドキュメント

How?

転置インデックスInverted index

と形態素解析とN-Gram

Why転置インデックス?

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〜速い〜最高〜

しかし、B+Treeで全文検索はむりぽ

Why?

「くろす」で全文検索したい場合

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.全文検索

2.周辺機能←

周辺機能のおさらい

• ハイライト

• スニペット

• ソート

• ページング

• サジェスト

• もしかして

• 絞込(カテゴリ)

• シャーディング

• レプリケーション

周辺機能のおさらい

• ハイライト

• スニペット

• ソート

• ページング

• サジェスト

• もしかして

• 絞込(カテゴリ)

• シャーディング

• レプリケーション

周辺機能のおさらい

• ハイライト

• スニペット

• ソート

• ページング

• サジェスト

• もしかして

• 絞込(カテゴリ)

• シャーディング

• レプリケーション

周辺機能のおさらい

• ハイライト

• スニペット

• ソート

• ページング

• サジェスト

• もしかして

• 絞込(カテゴリ)

• シャーディング

• レプリケーション

周辺機能のおさらい

• ハイライト

• スニペット

• ソート

• ページング

• サジェスト

• もしかして

• 絞込(カテゴリ)

• シャーディング

• レプリケーション

周辺機能のおさらい

• ハイライト

• スニペット

• ソート

• ページング

• サジェスト

• もしかして

• 絞込(カテゴリ)

• シャーディング

• レプリケーション

周辺機能のおさらい

• ハイライト

• スニペット

• ソート

• ページング

• サジェスト

• もしかして

• 絞込(カテゴリ)

• シャーディング

• レプリケーション

周辺機能のおさらい

• ハイライト

• スニペット

• ソート

• ページング

• サジェスト

• もしかして

• 絞込(カテゴリ)

• シャーディング

• レプリケーション

• ハイライト

• スニペット

• ソート

• ページング

• サジェスト

• もしかして

• 絞込(カテゴリ)

• シャーディング

• レプリケーション

周辺機能のおさらいノード1

シャード1台

• ハイライト

• スニペット

• ソート

• ページング

• サジェスト

• もしかして

• 絞込(カテゴリ)

• シャーディング

• レプリケーション

周辺機能のおさらいノード1

シャード1台

ノード2

シャード2

2台

ノード1

シャード1

検索クエリへの応答速度向上インデクシングの高速化

周辺機能のおさらい

• ハイライト

• スニペット

• ソート

• ページング

• サジェスト

• もしかして

• 絞込(カテゴリ)

• シャーディング

• レプリケーション

ノード1

シャード1台

周辺機能のおさらい

• ハイライト

• スニペット

• ソート

• ページング

• サジェスト

• もしかして

• 絞込(カテゴリ)

• シャーディング

• レプリケーション

ノード1

シャード1台

ノード2(slave)

2台

ノード1(master)

検索負荷の分散

シャードシャード

1.全文検索

2.周辺機能

Agenda

1.セッション概要

2.スピーカ紹介

3.全文検索を駆け足でおさらい

4.各全文検索エンジンの紹介と質疑&議論←

5.全体質疑(時間があれば)

• Elasticsearch

• Elasticsearch大谷さん

•Apache Solr

•クックパッド兼山さん

•Amazon CloudSearch

• ChatWork藤原さん

•Groonga(Mroonga,Rroonga,Nroonga)

•クリアコード須藤さん

大事なことなので2回言います

本セッションは質疑、議論重視

(ガチ)

バシバシ質問おなしゃす(ガチ)

Twitterでもハッシュタグ(#cross2015_c)付きでつぶやいていただければ

質問拾います

(会場からの質問を優先しますので時間切れしたら、ごめんなさい)