参加レポート:第4回elasticsearch勉強会 #elasticsearchjp
はじめに
4/21(月)に開催された第4回elasticsearch勉強会に参加してきました。場所はグラントウキョウサウスタワー。会場提供はリクルートテクノロジーズ様でした。一参加者としてお礼申し上げます、ありがとうございます!
なお、参加者にはElasticsearchのステッカーがもらえました(足りなかった人にはLogstashのステッカーだったとか。でもあのロゴも好きです僕)
tweetまとめはこちら。
レポート
※後日各発表のスライドが公開されましたら順次追加致します。
「アナライズ処理の仕組みとクエリDSL」 by 株式会社シーマーク 大谷純さん(@johtani)
・転置インデックスとは
・文章を要素に区切り、その素からドキュメントIDを引けるようにすること。
・アナライズ処理
・転置インデックスの単語をドキュメントから抽出する処理。
・フィールド毎に指定されたアナライザが処理。
・ドキュメント(レコード)をアナライズし、インデックスを作る。
・検索→検索ワードをアナライズし、インデックスを検索し、マッチした結果を返す。
・アナライズ処理の構成
・Char Filter→文字列を文字単位で処理。
・例:html_trip→HTMLタグを除外する、以後HTMLは検索しても引っ掛からない。
・Tokenizer→入力文字列をトークン列に分割する、分割ロジックはTokenizerによって違う。
・例:日本語用Tokenizer:Kuromoji
・TokenFilter→Tokenizerによって分割された個々のTokenに対して処理する。
・例:lowercase:小文字変換
・例:kuromoji_baseform:単語の基本形(美味しかった→美味しい)
・例:kuromoji_readingform:日本語をローマ字変換
・Char Filter→Tokenizer→Tokenfilterして残ったものが転置インデックスになる。
・情報付与
・個別情報
・例:kuromoji:品詞や読み、発音など
・クエリDSL
・クエリを書くのは結構大変。
・クエリの種類はたくさんある。
・クエリでもアナライズするが、アナライズしないクエリもある。
・入力でアナライズしているがクエリでアナライズしない場合、ヒットしないことがある。
・query_stringの注意点
・wildcardを使うとデフォルトでクエリが小文字に変換される。
・wildcardはアナライズされない。
・elasticsearch-extended-analyze
・SolrのAnalysis画面のような情報をJSONで返却する。まだ画面は作っていない。
・アナライズ処理のデバッグ用途で使える。
・プラグインをインストールし、GET /_extended_analyze?で叩くと、アナライズ処理が見える。
「elasticsearch-hadoopを使ってごにょごにょしてみる」 by 株式会社マーズフラッグ @yamakatu さん
・検索とビッグデータ分析の要望があった場合。
・検索はElastisearch。
・集計、分析→Hadoop?
・ElasticsearchとHadoopそれぞれにデータを置く必要は無いのでは?
・→elasticsearch-hadoopがある。
・elasticsearch-hadoop
・→HadoopからElasticsearchをストレージとして利用する。
・→SQLが書ければHiveでElasticsearchのデータを操作できる。既存資産があれば流用が出来る。
・MapReduceでElasticsearchをreadする場合→レスポンスの数だけMapが生成される。
・MapReduceでElasticsearchをwriteする場合→JSONで出力してElasticsearchに渡す。
・elasticsearch-hadoopの速度は?
・→評価を実施。単純にHadoopを利用した場合とHadoop+Elasticsearchを使った場合で10倍の差(遅い)
・elasticsearch-hadoopは便利だけど速度的には遅い。
「CouchbaseとElasticsearchが手を結んだら」 by 株式会社アットウェア 佐竹雅央さん(@madgaoh)、河村康爾さん(@ijokarumawak)
・Couchbase
・ドキュメント型NoSQLデータベース
・Membase、Apache CouchDBをベースに作られている
・永続化、動的スケールアウト、高可用性、なmemcachedサーバ
・メモリ+ストレージのハイブリッド・キーバリューストア
・データはJSON形式でスキーマレス
・データ横断的な処理は苦手
→Elasticsearchを連携させて補完
・Couchbase Plug-in for Elasticsearch
・CouchbaseのXDCR機能でElasticsearchへデータ同期
・PluginがXDCRをエミュレートするJettyサーバを起動する
・同期管理用のデータもElasticsearch上に登録される
・デモ:Rails + RDB + Couchbase + Elasticsearch
・Railsでブログ記事を登録したらCouchbaseにキャッシュとして登録され、XDCRでElasticsearchに連携される
・質疑:XCDRの連携で詰まったときは?→XCDRの機能で詰まったときに調整する機能がある。
「Elasticsearch at Wantedly」 by Wantedly, Inc 内田誠悟さん(@spesnova)
・Elasticsearchをどのように使っているか
・WantedlyのWebサイトで会社、募集(シゴト)、ユーザで検索出来る。
・社員数や場所などで絞り込みも可能。
・インデックス
・検索用インデックス、オートコンプリート用インデックスの2つ
・Rails4 on Herou、PostgreSQL、elasticsearch-ruby
・学び方
・公式リファレンス→読みづらい、使いづらい
・Elasticsearch Workshop
・Elasticsearchチュートリアル - 不可視点
・ユーザ情報→項目一つ一つで公開範囲を決められる
→nested,and,orクエリを駆使して実現
・質疑:Elasticsearch以外を候補に入れていたか?→最初からElasticsearchに決めていた。使われているサイトの実績とか。
・質疑:開発者同士の環境の同期は?→bootstrapスクリプトを使って開発者のローカル環境をセットアップしている。
・質疑:リリース後にスキーマを作り直したか?そのときの方法は?
→ELBの下にElasticsearchクラスタを置いて、ELBで切替している。切替時の差分データは後でWorkerで処理。
LT:「ElasticsearchのScripting」 by 株式会社富士通ソフトウェアテクノロジーズ 滝田聖己さん(@pisatoshi)
・クエリの中にスクリプトを書いてカスタマイズ
・フィルタの指定
・スコアリング
・ソート順の変更
・多彩な言語サポート
・種類
・Dynamic script、お手軽
・Preloaded Script、サーバにスクリプトファイルを配置してクエリで指定して実行。
・Native Script、Javaで実装しjarファイルを配置。起動時にロードして更新時は再起動要。
・フィルタ
・Delete by queryでも使える、ある項目が特定の長さ以上は除外する等。
LT:「Elasticsearch 向け多言語解析プラグイン」 by ベイシス・テクノロジー株式会社 江口天さん
・Elasticsearch Bostonで発表した内容のシェア
・Rosette Search Essentials
・他言語対応(24言語)
・言語処理のサポート(複合語分割、基本語化、正規化)
・サポートされる予定の機能(表記揺れ対応、正規化機能の拡張、e.t.c...)
まとめ
今回の勉強会は、応募人数が175名でほぼ満席。昨今のElasticsearchの注目度の高さはすごいですねー。今回も新しい発見が幾つもあったので、自分で手を動かして試してみたいと思います。
講師の皆さん、スタッフの皆さん、ありがとうございました!