Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.

Elasticsearchプラグインの作り方

Elasticsearchプラグインの簡単な作り方を紹介します。また、Elasticsearchを便利に利用するためのプラグインも紹介します。

  • Soyez le premier à commenter

Elasticsearchプラグインの作り方

  1. 1. Elasticsearchプラグインの作り方 ~ CodeLibsの便利なプラグイン紹介 第7回Elasticsearch勉強会
  2. 2. 第7回Elasticsearch勉強会 名前: 菅谷信介 所属: N2SM, Inc. (http://www.n2sm.net/) オープンソース活動: Apache Portals コミッタ Seasarプロジェクトコミッタ CodeLibsプロジェクト運営 (https://github.com/codelibs) などなど・・・ Github: https://github.com/codelibs Blog: http://www.chazine.com/ Twitter: https://twitter.com/shinsuke_sugaya/ 自己紹介 2
  3. 3. 第7回Elasticsearch勉強会 アジェンダ Elasticsearchプラグインとは プラグインの作り方 CodeLibsのプラグイン紹介 まとめ 3
  4. 4. 第7回Elasticsearch勉強会 Elasticsearchプラグインとは 4
  5. 5. 第7回Elasticsearch勉強会 Elasticsearchの機能を拡張する仕組み pluginコマンドにより簡単にインストール プラグインは2種類ある ネイティブなプラグイン (今日は主にコレ) Elasticsearchの機能自体を変更・拡張する サイトプラグイン HeadやkopfのようにHTMLでの情報提供系 ネイティブなプラグインはJavaで作り、jar ファイルをzipでまとめたもの Elasticsearchプラグインとは 5
  6. 6. 第7回Elasticsearch勉強会 プラグインの作り方 6
  7. 7. 第7回Elasticsearch勉強会 必要なもの Java 7以上 Maven 以下のコマンド実行でプロジェクトが完成! $ mvn archetype:generate ¥ -DarchetypeGroupId=org.codelibs ¥ -DarchetypeArtifactId=elasticsearch-plugin-archetype ¥ -DarchetypeVersion=1.4.0 ¥ -DelasticsearchVersion=1.4.0 ¥ -DgroupId=com.yourplugin ¥ -DartifactId=elasticsearch-yourplugin ¥ -Dversion=1.0-SNAPSHOT ¥ -DpluginName=YourPlugin プラグインプロジェクトの作成 赤字部分を変更する 7
  8. 8. 第7回Elasticsearch勉強会 プラグインのzipファイルを生成 $ mvn package (target/releasesディレクトリ以下に生成される) プラグインのインストール $ $ES_HOME/bin/plugin –i yourplugin -u file:/path/elasticsearch-yourplugin.zip あとはElasticsearchを再起動すればOK! プラグインの生成 8
  9. 9. 第7回Elasticsearch勉強会 という感じで、 Elasticsearchプラグインは 簡単に作って インストールできます 9
  10. 10. 第7回Elasticsearch勉強会 もう少し プラグインの作り方の 説明します… 10
  11. 11. 第7回Elasticsearch勉強会 Elasticsearchプラグインを作成するための Maven Archetype ブランクプロジェクト(ひな形)が作成できる コマンド一つでプロジェクトが作成可能 Elasticsearch 1.xごとにArchetypeは提供 Elasticsearchがマイナーバージョンアップで I/Fが変わるため、作り直している… シンプルなプロジェクトが作成されるので、 必要なものを追加や削除すれば、簡単に Elasticsearchのプラグインができます! Elasticsearch Plugin Archetype https://github.com/codelibs/elasticsearch-plugin-archetype 11
  12. 12. 第7回Elasticsearch勉強会 プロジェクト設定ファイル pom.xml プラグイン情報ファイル src/main/resources/es-plugin.properties プラグインのベースとなるソース src/main/java/com/yourplugin/YourPluginPlugin.java REST用ソース src/main/java/com/yourplugin/rest/YourPluginRestAction.java サービス用ソース src/main/java/com/yourplugin/module/YourPluginModule.java src/main/java/com/yourplugin/service/YourPluginService.java River用ソース src/main/java/com/yourplugin/module/YourPluginRiverModule.java src/main/java/com/yourplugin/river/YourPluginRiver.java プラグイン生成情報のファイル src/main/assemblies/plugin.xml Archetypeの生成物 12
  13. 13. 第7回Elasticsearch勉強会 public class YourPluginRestAction extends BaseRestHandler { @Inject public YourPluginRestAction(final Settings settings, final Client client, final RestController controller) { super(settings, controller, client); controller.registerHandler(RestRequest.Method.GET, "/{index}/{type}/_hello", this); controller.registerHandler(RestRequest.Method.GET, "/{index}/_hello", this); } 例:REST APIを拡張 (その1) 13 受け付けるHTTPメソッドやパスを指定する
  14. 14. 第7回Elasticsearch勉強会 @Override protected void handleRequest(final RestRequest request, final RestChannel channel, Client client) { try { final XContentBuilder builder = JsonXContent.contentBuilder(); builder.startObject(); builder.field("index", request.param("index")); builder.field("type", request.param("type")); builder.field("description", "This is a elasticsearch-yourplugin response: " + new Date().toString()); builder.endObject(); channel.sendResponse(new BytesRestResponse(OK, builder)); } catch (final IOException e) { try { channel.sendResponse(new BytesRestResponse(channel, e)); } catch (final IOException e1) { logger.error("Failed to send a failure response.", e1); } } } 例:REST APIを拡張 (その2) 14 返却するJSONをこの辺に記述する
  15. 15. 第7回Elasticsearch勉強会 CodeLibsプラグインの紹介 15
  16. 16. 第7回Elasticsearch勉強会 ウェブサイトをクロールして、ページをイン デックス化する (サイト内検索にも利用可) 全文検索サーバFessと同じクローラー CSSクエリーによるウェブスクレイピング スクリプトにより編集して登録 クロール開始時間をスケジュール BASIC/DIGEST/NTLM認証に対応 attachmentタイプもサポート Elasticsearch River Web https://github.com/codelibs/elasticsearch-river-web 16
  17. 17. 第7回Elasticsearch勉強会 SolrのI/FでElasticsearchにアクセス Mock Solrプラグインがメンテされていないので フォークして提供 検索・更新に対応 Geoサーチにはまだ未対応 Solr形式のXML/JavaBinフォーマットに対応 SolrJ等でSolrのツールが利用可能 利用例 Solr環境からの移行 Elasticsearch Solr API https://github.com/codelibs/elasticsearch-solr-api 17
  18. 18. 第7回Elasticsearch勉強会 Mahout Tasteをベースのリコメンド機能 利用者/商品/嗜好データ管理 情報をインデックスで管理 利用者/商品ベースのリコメンド 類似利用者の算出 テキスト分析 (商品情報のタームベクターの 生成等) 「利用者/商品/嗜好→ドキュメント/ターム/ 出現数」として、協調フィルタリングによる ドキュメントのリコメンド Elasticsearch Taste https://github.com/codelibs/elasticsearch-taste 18
  19. 19. 第7回Elasticsearch勉強会 生成済みのインデックスをコピーして、 新しいインデックスを作成する _sourceからデータをスクロールスキャンして、 インデックスを生成 簡単にインデックスをコピー可能 利用例 テスト等で既存インデックスから、Analyzerや マッピングが異なるインデックスを作成する 今後:他のクラスターに対しても再インデク シングを可能にしたい Elasticsearch Reindexing https://github.com/codelibs/elasticsearch-reindexing 19
  20. 20. 第7回Elasticsearch勉強会 Excel/CSV/バルクJSON形式でデータをダン プする Excelでダンプできる! …/_searchの代わりに…/_dataを指定する 利用例 Excel好きな人に結果を渡す バルクJSON形式で部分抽出をして、別インデッ クスにバルク投入して利用(全データが必要 ない場合とか) 今後:内部ロジックでレスポンスの返却の仕 方を改善 Elasticsearch Data Format https://github.com/codelibs/elasticsearch-dataformat 20
  21. 21. 第7回Elasticsearch勉強会 スクリプトを利用したクエリーテンプレート 任意のスクリプト言語でクエリーを組み立てる (標準のmustacheは穴埋め的なクエリー作成が 可能だがそれでは物足りない人向け) 標準のクエリーテンプレートとほぼ同じ langを指定する追加する パラメータ書き換えのためのフィルタ機能 利用例 パラメータによりクエリーを変更する A/Bテスト https://github.com/codelibs/elasticsearch-sstmpl Elasticsearch Script-based Search Template 21
  22. 22. 第7回Elasticsearch勉強会 クエリー例 GET /_search/template { "lang": "groovy", "template": "'{¥"query¥": {¥"match¥": {¥"title¥": ¥"' + query_string + '¥"}}}'", "params": { "query_string": "search for these words" } } langでtemplateのスクリプト言語を指定 利用したいスクリプト言語は追加しておく https://github.com/codelibs/elasticsearch-sstmpl Elasticsearch SSTmplの例 22
  23. 23. 第7回Elasticsearch勉強会 Handlebarsをスクリプト言語として Elasticsearchに追加する クエリーテンプレートで標準のmustacheで できなかった、ロジックが書ける HandlebarsのHelperもjsファイルで記述す ることが可能 Elasticsearch Handlebars Lang https://github.com/codelibs/elasticsearch-lang-handlebars 23
  24. 24. 第7回Elasticsearch勉強会 Velocityをスクリプト言語として Elasticsearchに追加する クエリーテンプレートでVelocityが利用可能 Dynamic Scriptingを有効にする script.disable_dynamic: false Elasticsearch Velocity Lang https://github.com/codelibs/elasticsearch-lang-velocity 24
  25. 25. 第7回Elasticsearch勉強会 インデクシング時に指定されたフィールドの 単語に対するb-bit MinHashを計算・保存 簡単にいうと、MinHashは高速に2つのデータを 比較する方法 (文書も指定したビット列に変換さ れ、それだけを比較することで一致を判断) プラグインでバイトフィールドに格納 0/1のビットの文字列でも格納可能 利用例 類似文書の検索 高速に類似ドキュメントを計算 Elasticsearch MinHash https://github.com/codelibs/elasticsearch-minhash 25
  26. 26. 第7回Elasticsearch勉強会 検索結果の上位N件を並び替える 並び替えはスクリプト言語で記述する 標準のRescoringはシャード単位だが、 DynaRankはマージされた結果に対して 並び替えを行う N+1番目以降は通常の検索結果と同様 インデックス設定を変更することで、動的に 有効・無効にすることができる 利用例 特定の内容は上位に表示する 検索結果の重複をなくす Elasticsearch DynaRank https://github.com/codelibs/elasticsearch-dynarank 26
  27. 27. 第7回Elasticsearch勉強会 検索結果をキャッシュする Solrでいうと、Query Result Cacheのこと (QRコードのキャッシュではないです…) インデックスがあまり更新されないような ケースで有効 リアルタイムとは逆行するがインデックスの 種類によっては更新頻度が低いものもある キャッシュは保存量、期限、Refreshの呼び 出しにより、クリア可能 Elasticsearch QRCache https://github.com/codelibs/elasticsearch-qrcache 27
  28. 28. 第7回Elasticsearch勉強会 クラスタイベントが発生したときに指定した スクリプトを実行する 利用例 マスターノードが切り替わった場合に通知する ノードが増減した場合にスクリプトを実行する 今後:Elasticsearchのバージョンによりイベ ント内容が異なるので、クラスターイベント を汎用化したい Elasticsearch Event Hook https://github.com/codelibs/elasticsearch-eventhook 28
  29. 29. 第7回Elasticsearch勉強会 ElasticsearchのREST APIをアクセス制御す るプラグイン ユーザー管理 REST APIのアクセス管理 ログイン/ログアウト/トークン デフォルトのユーザー管理はElasticsearchの インデックスを利用(拡張可能な実装) パス、HTTPメソッド、ロールの組み合わせ 今後:shieldの内容を見て考える(と思う) Elasticsearch Auth https://github.com/codelibs/elasticsearch-auth 29
  30. 30. 第7回Elasticsearch勉強会 その他 30
  31. 31. 第7回Elasticsearch勉強会 Javaのコード上でElasticsearchのクラスタ を立ち上げる 1つのJVM上に複数のElasticsearchを起動す ることが可能 利用例 JunitなどのテストケースでElasticsearchを立ち 上げて動作確認する バッチ処理の中でElasticsearchを立ち上げ、ス ナップショットから復元して処理する(本稼働の ESに影響を与えずに同等のインデックスで処理 可能) Elastisearchの動作調査や学習目的での利用 Elasticsearch Cluster Runner https://github.com/codelibs/elasticsearch-cluster-runner 31
  32. 32. 第7回Elasticsearch勉強会 まとめ 32
  33. 33. 第7回Elasticsearch勉強会 まとめ (プラグイン作りについて) プラグインを作れば、Elasticsearchをいろ いろと拡張できるので、可能性が広がる Solrと比較してもプラグインは作りやすいし、 導入しやすい 結構、いろいろと差し替えることができる RESTのプラグインから作るとわかりやすい マニアックなことしたいと情報はソースのみ Elasticsearchのバージョンが上がると、 たまに動かなくなる可能性がある… まだまだ作りたいプラグインがある… 33
  34. 34. 第7回Elasticsearch勉強会 Q&A 34

    Soyez le premier à commenter

    Identifiez-vous pour voir les commentaires

  • stoshiya

    Nov. 19, 2014
  • scova0731

    Nov. 20, 2014
  • masatotada

    Nov. 21, 2014
  • hirokzuhata

    Nov. 21, 2014
  • takafumiiju

    Nov. 22, 2014
  • KanSakamoto

    Dec. 7, 2014
  • abenben

    Dec. 7, 2014
  • toutoutakataka

    Jan. 31, 2015
  • takahitotakabayashi

    Mar. 8, 2015
  • kimototakumi

    Apr. 13, 2015
  • passfield2003

    Apr. 28, 2015
  • hoshina

    Jun. 1, 2015
  • shinichisuwa

    Oct. 11, 2015
  • yochikun

    Nov. 14, 2015
  • higebu

    Nov. 14, 2015
  • keiaihara

    Jun. 10, 2016
  • kieaiaarh

    Jun. 14, 2016
  • TetsuyaHasegawa

    Aug. 31, 2016
  • JunUchino

    Feb. 3, 2017
  • naotoinoue

    Nov. 20, 2017

Elasticsearchプラグインの簡単な作り方を紹介します。また、Elasticsearchを便利に利用するためのプラグインも紹介します。

Vues

Nombre de vues

14 302

Sur Slideshare

0

À partir des intégrations

0

Nombre d'intégrations

7 795

Actions

Téléchargements

34

Partages

0

Commentaires

0

Mentions J'aime

21

×