勉強会メモ - 第4回elasticsearch勉強会 2014/04/21
どうも!Elasticsearch の勉強会に参加しました。勉強会メモです。上の写真は勉強会でのいただきものです。ステッカーげっと(笑)。その場で、MacBook Air に貼りました(笑)。
追記:早速 ES にトライしました。こちらもどうぞ!
Elasticsearch キックスタート! - よしだのブログ
アナライズ処理の仕組みとクエリDSL
株式会社シーマーク 大谷 純さん @johtani
転置インデックスとは? (割愛)
アナライズ処理
- 単語に区切る処理、フィールドごとにアナライズ処理を定義できる、アナライザー
- 検索時とインデックス処理時に動く
- char_filter 、 tokenizer 、token_filter
- char_fileter は、文字単位で処理が可能。
- tokenizerは、単語単位に分割する。
- token_filter は、単語単位で処理が可能。ベースフォームへの変換、読みがなの展開など。
- トークンの業内での位置、文書全体での位置(start/offset)などもインデックスに出力される
クエリDSL
- ドキュメントと検索クエリでマッチするようにアナライズ処理を作るように気をつける必要がある
- アナライズしない検索クエリもあるので、確認して使うように。
extended_analyze プラグイン
- Solrのアナリシス画面に類似する機能をプラグインで実装。
- Sensu はクエリの補完をしてくれるので、便利。開発用途ならフリー。
- アナライズの結果を json で出力する、画面は用意されていない。
elasticsearch-hadoopを使ってごにょごにょしてみる
株式会社マーズフラッグ R&D部 やまかつ さん @yamakatu
- elasticsearch では可視化はできるけど、それ以上の分析はできない
- elasticsearch と hadoop それぞれにデータをおかずに共有できる → elastic search-hadoop
- hadoop から、elasticsearch をストレージとして利用できる!(read/write)
- MapReduceからの利用。結構簡単そうな印象、classpath通してあげればOK
- Hiveからも利用可能。Pig は不明。
- パフォーマンスは遅いが、見落としがある?
- MapR との連携関連で情報があるかも。→次回、勉強会に参戦予定とのこと。
- Read を HDFS から、Wirte は es に、もしくはその逆も可能。
CouchbaseとElasticsearchが手を結んだら
株式会社アットウェア 佐竹雅央さん @madgaoh 河村康爾さん @ijokarumawak
- Couchbase Server とは No SQL
- メモリ + ストレージのハイブリッド、JSON、スキーマレス、スケールアウト可、TTL設定可能、REST API でノード管理可能。データ横断的な処理は苦手
- なので、elasticsearch と組み合わせて苦手を克服。
- 連携プラグインがあり、連携が可能 Couchbase Plug-in for Elasticsearch。Elasticsearch へデータを流しこむことができる
- Plugin が couchbase の XDCR のプロトコルをエミュレートするjettyサーバーを起動する。XDCR経由でデータを登録する。
- XDCR は、通常 couchbase 同士のレプリケーションをやりとりするプロトコル。レプリケーション先で elasticsearch を指定できる。
- デモ:rails + couchbase + elasticsearch
- 現状のリリースは 0.9 までしか対応していない
- すでに大量のデータがある場合は、XDCR の連携設定で流量を絞る必要がある。また、es のキューからあふれることもあるので、検証などでは注意。
- TTL 機能は、es 側では厳密でないので注意
Elasticsearch at WANTEDLY
Wantedly, Inc 内田誠悟さん @spesnova
- WANTEDLYについて、リクルーティングの会社、採用以外にも仕事を楽しくするをテーマにツールなども提供している
- ユーザー名、自己紹介文などの検索に利用
- 通常の検索に加え、auto complete 用のインデックスを分けて使っている
- 通常用:件数35万 サイズ2GB、オートコンプリート:9万 サイズ1GB
- elasticsearch-ruby は tire (開発が終わっている・・)
- クラスタは m1.small 2台
- プラグイン/ Head、HQ、Marvel (開発環境のみ)、Kuromoji
- 公式リファレンスは勉強するのにはおすすめしない、例が部分的すぎてわかりにくい。Elasticsearch workshop のスライドが分かりやすい
- ブログおすすめ。
- ユーザー検索は項目が多く、さらに項目毎にプライバシーレベルがある。(フレンドまでとか、全体公開とか) レベルに応じて、検索に引っかけて良い項目のみを検索している。
- 開発では、bootstrapスクリプトを作っており、同じ開発環境をセットアップできるように工夫している。
- リリース後のスキーマ変更は、2セット用意しておいて ELB で振り替えている。
Elasticsearchのスクリプティング(仮)
株式会社富士通ソフトウェアテクノロジーズ 滝田聖己さん @pisatoshi
- クエリの中にスクリプトを書くことがでロジックをカスタマイズできる。(スコア計算とかソートとか)
- Dynamic Script クエリの中にスクリプトを書く。運用上は若干リスキー。
- Preloated Script スクリプトファイル指定。一定時間ごとにリロード
- Navive Script Javaで書いて jar を読み込ませる。パフォーマンスは良いが Script ??
- フィールド値の文字列置換のサンプル。電話番号とか。
- 検索結果のフィルタリングのサンプル。
- Delete by query のサンプル。
- Native Script。2つクラスを作る。抽象クラスのオーバーライド。
- Navive Script で非正規化(Join)。すでにやっている人がいる!★
- 全ノードに手で配布しないといけないので注意が必要。特にバージョンアップ時など、ズレるとノードごとに結果が違うという事になる。
Elasticsearch 向け多言語解析プラグイン
ベイシス・テクノロジー株式会社 江口天さん
- 24言語対応。プラグインとして使用できる。わかちがち対応、未知語もOK。パフォーマンスも速い。
- 言語処理のサポート、分かち書き、Lemmatization、正規化(カタカナ語における長音の有無など)
- 将来実装したい:省略語の表記ゆれ対応、数字ノーマライズ
感想
個人的には、elasticsearch-hadoop と scripting が面白かったです。
hadoop 連携については、hadoop の HDFS にインデックスを保存する、つまり検索がhadoopを使う、という発想しかなかったのですが、逆に hadoop が検索を使うという仕組みがすでにあったことにびっくりでした。
scripting については、自由度高くいろんなことが出来そうだなと感じました。やり過ぎるとパフォーマンスがアレな感じになりそうですが、そうとう面白いことが出来そうです。join とか、これまでの検索では全く諦めてたのに・・。