参加レポート:第4回elasticsearch勉強会 #elasticsearchjp

elasticsearch-logo

はじめに

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の注目度の高さはすごいですねー。今回も新しい発見が幾つもあったので、自分で手を動かして試してみたいと思います。

講師の皆さん、スタッフの皆さん、ありがとうございました!