昨日、第11回 Elasticsearch 勉強会へ参加してきた。いつもの時間に会社を出たつもりだけど、会場・開始までにはそんなに余裕が無かったので、いつもの時間を間違えていた気がするのだけど、いつもの時間とはいつだったのだろうか。
今回は Elastic 社の CTO である Shay Banon さんがトークするという回。昨年もそういうタイミングがあったそうなのだけど、その頃は Elasticsearch に触れていなかったので、まったく知らなかった。
その Shay さんの到着が遅れそうだからみたいな理由(だったと思う)で、LT からのスタートに予定変更になっていた。でも、開会のタイミングでは到着していたので、元通りの発表順でも間に合ったかも知れない。ただ、LT で始まり、通常の勉強会の雰囲気が作られた後で CTO の発表という順番は、意外と良かったのかも知れない。
【追記】到着遅れという話じゃなくて、最初から場の空気を感じてもらう意図での順番変更だったそうです。さすが。
@suzuki なるほど。あと、順序を入れ替えたのは、書いていただいた通りの理由で、間に合わないってのではなく、話しやすいし、いい感じにつながりそうって意味でした!
— Jun Ohtani (@johtani) 2015, 7月 27
各 LT の発表後、Shay さんから積極的に Question を投げてたし、そういう場の空気を感じてから発表するのは、彼にとってもやりやすかったんじゃないかなぁと勝手に思ったりした。どうせなら話した後に満足感を得て頂きたいしねぇ。そういう意味では、まともに英語が聴き取れない参加者だったオレは、彼に満足感を与えられないのであった。まったく申し訳ない。
ということで、各感想など。
会場提供して頂いているリクルートテクノロジーズさんでどのように Elasticsearch を使っているかの話。
Elasticsearch を選択したのは、その簡易性にあったとか。スケールが楽だし、レプリカがあり障害時の対応も楽という話。発表後の会場からの質問で「大規模利用で苦労したことは?」との答えが「いまのところ特に無い」だったところからもシステムの信頼性の高さが伺えた。
また、検索に関して、複数のインデックスを作れるところも魅力だとか。形態素解析だけ、N-gram だけ、ではなく、それらを組み合わせて検索ができるところが良いそうだ。「ハイブリッドインデックス」と呼んでいた。
ただこれだけではなく、検索用に静的および動的な独自スコアを付けて、そのヒット率を上げているとか。静的なスコアは、ユーザのログやコンテンツを Hadoop で集計し、Elasticsearch へ保存しておく。動的なスコアは、クエリ内容によって可変させる仕組みを作っているそうだ。ひとつのクエリを実行する前に、そのクエリに対応するファクター(要因)を検索し、そのファクターを利用したクエリに書き換えて検索を実行するなどの方式を取っているみたい。
この辺りの挙動はプラグインで行なっているんだとか。自作、かな。
インティメート・マージャーさんの DMP で Elasticsearch をどのように使っているかという話。少し前に別の流れでこの会社名を聞いていて、その後にこの勉強会で発表があると聞いてビックリしていた。
Elasticsearch には 3.6 億レコードを入れて利用中とのこと。DMP なので、複数のデータソースから各種ログなどをインプット要素にしており、それらを KVS などで JOIN した後のデータを Elasticsearch へ入れているそうだ。
サンプルのデータ構造としてはこんな感じのだった(まだスライド公開されていないので、実況ツイートと記憶で書いている)。
_id | segment | keyword | user_agent | area | org |
---|---|---|---|---|---|
1 | [aaa,bbb] | [xxx,yyy] | Safari | Tokyo | Ad service |
こういったデータから「女性で東京に住んでいる人」や興味・関心などの条件で絞り込みを行い、広告配信システムへ引き渡す使い方を行なっている。
また、特徴抽出のような機能もあり、例えば「Elasticsearch というキーワードで抽出される人たちの業種」というと広告業界が多く、更にその中でもサイバーエージェントの人が多いみたいなところまで分かるんだとか。
これらの QPS を特に測ったりはしていないそうだけど、ID を抽出するようなクエリの場合、数千万件(の結果?)でも1秒かからないレベルだそうだ。
どのくらいのノード数でこれを実現しているのか知りたいな(発表内にあって聞き漏らした可能性あり)。
ホットリンクさんのサービスで Elasticsearch を使っている話。ソーシャルメディアなどのデータを一般的な企業でも使いやすいように加工して利用してもらうサービスを運営しているとのこと。
ソーシャルメディア上の書き込みをテキストマイニングして、その発言がポジティブなのかネガティブなのかを判定したり、どの年齢層が多いのか、どの位置情報が多いのかを調べたり、拡散した元の発言者(インフルエンサー)が誰なのか?を知ることができるのだとか。また、時系列の過去データを利用して、これから流行る商品や株価の行方などの未来予測なども行えるサービスもやっているそうだ。
そういうサービスでなぜ Elasticsearch を使うことになったのかというと、データ量の増大があったり、他言語化やリアルタイム性の要求が大きくなったからとのこと。
データの流れとしては、ソーシャルメディアのデータをクローラーやストリームで MySQL や S3 にいったんストアし、そのストアしたデータを Elasticsearch へ入れているとのこと。直接 Elasticsearch へ入れていないのは、データロストを心配していまのところこの形になっているみたい。あと、一次受けで MySQL を使っているのは、旧来のシステムがまだ残っているからだそうだ。ちなみに旧システムは、Senna で形態素解析をやっていたので、同じく形態素解析が使える Elasticsearch + kuromoji は相性が良かったみたい。
ノード数については、30ノードと話していた気がする。
はてなブックマークでの Elasticsearch の使い方の話。はてブの検索エンジンは、MySQL → Sedue → Solr → Elasticsearch と移ってきているそうだ。
Elasticsearch は、全体で3クラスタを利用しており、それぞれユーザー(の検索?)用とバッチ処理用、(システムの?)ログ用になっている。
はてブでの検索用途では、タグやタイトル検索には普通にキーワード検索やソート、フィルタなど。本文検索には「コンセプトサーチ」と言っていた気がするけど、ちょっと良くわからず。「他社製品名に聞こえるよね」みたいな声も会場から上がってたけど、ちょっと分からない。
Term Vector API を使って(?)、検索用語に味付けをして、より精度の高い検索結果を出しているような話だった気がするけど、ちょっとうまく思い出せない。
特集記事みたいなものは、はてブの編集さんがまとめているのだけど、ここに掲載するための Query DSL を編集さんに書かせるのは難しいので、それ用の管理画面を用意して使ってもらっているそうだ。管理画面をポチポチしていくと、裏側でクエリを組み立てているそうだ。
「どのくらいのノード数で使っているか?」という質問が相変わらず出てくるんだけど、「メインクラスタ9台」という話だった。
さて、今回の目玉、CTO の Shay さんの話。スライドは無く、会場からの質問ベースのやりとり。ここからオレの実況ツイートは途絶えている。いや、聞き取れる単語はあるし、だいたい何を言っているかの雰囲気は分かるんだけど、詳細はまったく頭に入ってこない。
英語が、英語が、英語が……
それでも @yusuke さんが同時テキスト通訳をしてくれていたので、理解できるところは理解できた。いや本当にありがたかった。
この話の中で、いくつか気になった点だけ箇条書きでピックアップして書いておく。
どこかの発表の時に 2.0 で入る「Pipeline Aggregations のリンク」が紹介されていて辿っていったのだけど、master 版のリファレンスには、もう 2.0 で拡張予定の機能がドキュメント化されているんだね。いつも 1.6 とか 1.7 版のリファレンスしか見てなかったから気づいていなかった。
あと、その Pipeline Aggregations に含まれる機能は、もしかしたら、使いたかった機能かも知れないので、これから読み進めようと思っている。
はー、 Elasticsearch いいわぁ。