ちょっと話題の記事

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

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

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 WorkshopElasticsearchチュートリアル - 不可視点 ・ユーザ情報→項目一つ一つで公開範囲を決められる →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の注目度の高さはすごいですねー。今回も新しい発見が幾つもあったので、自分で手を動かして試してみたいと思います。

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