elasticsearchプラグイン入門

4,705 views
4,398 views

Published on

elasticsearchプラグインのJavaを用いた作り方の説明です。また、Solr APIプラグインを導入して、Solrをelasticsearchに置き換えてFessを動かしてみます。

Published in: Technology
0 Comments
9 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
4,705
On SlideShare
0
From Embeds
0
Number of Embeds
1,214
Actions
Shares
0
Downloads
23
Comments
0
Likes
9
Embeds 0
No embeds

No notes for slide

elasticsearchプラグイン入門

  1. 1. elasticsearchプラグイン入門 Solr APIプラグインでSolrを入れ替えてみよう
  2. 2.  名前: 菅谷信介  所属: N2SM, Inc.  オープンソース活動: – Apache Portals、codehaus、Seasarプロジェクトなど – Fessプロジェクト運営 などなど・・・  Twitter: @shinsuke_sugaya  ブログ: http://www.chazine.com/ 自己紹介 2
  3. 3.  elasticsearch plugin入門  elasticsearch-solr-apiとは  elasticsearch-solr-apiのデモ アジェンダ 3
  4. 4. Plugin入門 4
  5. 5.  elasticsearchの機能をカスマイズする方法  プラグインのzipはjarをまとめたもの  pluginコマンドでインストールする ● plugin -install ...  unzipコマンドでpluginsディレクトリに展開でも良 い(と思う)  プラグインを作ればいろいろとできる ● 基本的なところは簡単に作れる ● いろいろとやるには情報が足りない… ● すごいことしたいならコード読むしかない eleasticsearch pluginとは 5
  6. 6.  Analysis: Analyzer関連の変換系  River: データを取り込む系  Transport: 他とやりとりする系  Site: 統計情報などサイト表示系(作り方はちょっと例外的)  Script: Pythonとか多言語実行系  その他: いろいろ… プラグインの種類 6
  7. 7.  es-plugin.propertiesを作成する  Pluginクラスを作成する  Moduleクラスを作成する  必要なコンポーネントを作る  assembly用のxmlファイルを作る (maven-assembly-pluginでzip化する) ・・・以上 プラグインの作り方 7
  8. 8. ディレクトリ構成図例 8 ├── pom.xml └── src    └── main    ├── assemblies    │   └── plugin.xml    ├── java    │   └── <package name>    │   ├── plugin    │   │   ├── ...Module.java    │   │   └── ...Plugin.java    │   └── rest    │  └── ...RestAction.java    └── resources    └── es-plugin.properties ① ②
  9. 9.  Pluginクラスを指定するファイル plugin=<package name>.〜Plugin es-plugin.properties 9
  10. 10.  モジュールやサービスの登録や設定など行う Pluginクラス 10 public class SolrPlugin extends AbstractPlugin { @Override public String name() { return "SolrPlugin"; } @Override public String description() { return "This plugin provides Solr interface on the elasticsearch."; } @Override public void processModule(final Module module) { if (module instanceof RestModule) { ((RestModule) module).addRestAction(SolrUpdateRestAction.class); ((RestModule) module).addRestAction(SolrSearchRestAction.class); } } @Override public Collection<Class<? extends Module>> indexModules() { final Collection<Class<? extends Module>> modules = new ArrayList<Class<? extends Module>>(); modules.add(SolrIndexModule.class); return modules; } } AbstractPluginを継承するAbstractPluginを継承する
  11. 11. Pluginクラスの例 11 @Override public void processModule(final Module module) { if (module instanceof RestModule) { ((RestModule) module) .addRestAction(SolrUpdateRestAction.class); ((RestModule) module) .addRestAction(SolrSearchRestAction.class); } } @Override public Collection<Class<? extends Module>> indexModules() { Collection<Class<? extends Module>> modules = new ArrayList<Class<? extends Module>>(); modules.add(SolrIndexModule.class); return modules; } HTTP等でリクエストを 処理したい場合 RestActionを登録 HTTP等でリクエストを 処理したい場合 RestActionを登録 サービス等のモジュールを作り コンポーネントを登録する サービス等のモジュールを作り コンポーネントを登録する
  12. 12.  コンポーネント登録を行う Moduleクラス 12 public class SolrIndexModule extends AbstractModule { @Override protected void configure() { this.bind(RegisterSolrDateType.class) .asEagerSingleton(); } }
  13. 13.  @Injectを付けたコンストラクタで他コンポーネン トを取得可能 各種コンポーネント 13 public class RegisterSolrDateType extends AbstractIndexComponent { @Inject public RegisterSolrDateType(final Index index, @IndexSettings final Settings indexSettings, final MapperService mapperService) { super(index, indexSettings); …略… } }
  14. 14.  Mavenでzip成果物を生成するための設定ファイル assemblyのXMLファイル 14 <?xml version="1.0"?> <assembly> <id></id> <formats><format>zip</format></formats> <includeBaseDirectory>false</includeBaseDirectory> <dependencySets> <dependencySet> <outputDirectory>/</outputDirectory> <useProjectArtifact>true</useProjectArtifact> <includes> <include>org.codelibs:elasticsearch-solr-api</include> <include>org.apache.solr:solr-core</include> ... 略 ... </includes> </dependencySet> </dependencySets> </assembly> 含めるjarファイルを記述する含めるjarファイルを記述する
  15. 15.  maven-shade-pluginによりパッケージ名が変えら れている  例: org.joda→org.elasticsearch.common.joda  RestRequestから複数の値を持つリクエストパラ メータが取得できない  …/hoge?a=1&a=2&a=3 → a=[1,2,3]ではとれない  pom.xmlに記述した依存関係で成果物ができないの で、zipにjarを入れ忘れたり…  非同期なので、デバッグを注意する 作る上でのポイント 15
  16. 16. Solr APIプラグイン & Fessとのデモ 16
  17. 17.  Solrのインターフェースでelasticsearchを利用でき るプラグイン  mocksolrpluginからフォーク  SolrのXMLとJavaBin形式に対応  SolrJとか使って、検索と更新ができる  ファセットやハイライトも可能  Solrのファンクションクエリーは非対応 Solr APIプラグインとは 17
  18. 18.  elasticsearchのインストール tar zxvf elasticsearch-0.90.3.tar.gz  プラグインのインストール ./bin/plugin -install elasticsearch-solr-api -url http://maven.codelibs.org/org/codelibs/elasticsearch- solr-api/1.2.1/elasticsearch-solr-api-1.2.1.zip  elasticsearchの実行 ./bin/elasticsearch  以下のURLでSolrのようにアクセスできる: http://hostname:9200/[index]/[type]/_solr 導入手順 18
  19. 19.  簡単に導入できるOSS全文検索システム  Apache Solrを検索エンジンとして利用  Apacheライセンスで提供  Webサイトやファイルシステムのクロール  データベースもクロール可能  ブラウザによる管理画面  MS Office、PDF、圧縮ファイルもサポート  ログイン状態で検索結果の出し分け可能  登録したカテゴリごとに検索可能  ・・・などなど機能多数 Fessとは 19
  20. 20.  solrlib.diconでSolrのURLを変更する http://localhost:8080/solr/core1/ ↓ http://localhost:9200/solr/core1/_solr  elasticserchにmappingを作成する ・・・以上 Fessでの導入手順 20
  21. 21.  curl -XPUT 'http://127.0.0.1:9200/solr/core1/_mapping' -d '…' Fessで利用するmappingを作成 21 "properties" : { "id" : {"type" : "string", "store" : "yes", "index" : "not_analyzed"}, "parentId" : {"type" : "string", "store" : "yes", "index" : "not_analyzed"}, "segment" : {"type" : "string", "store" : "yes", "index" : "not_analyzed"}, "digest" : {"type" : "string", "store" : "yes"}, "boost" : {"type" : "float", "store" : "yes", "null_value" : 1.0}, "host" : {"type" : "string", "store" : "yes"}, "site" : {"type" : "string", "store" : "yes"}, "url" : {"type" : "string", "store" : "yes", "index" : "not_analyzed"}, "content" : {"type" : "string", "store" : "yes"}, "title" : {"type" : "string", "store" : "yes"}, "cache" : {"type" : "string", "store" : "yes", "index" : "not_analyzed"}, "tstamp" : {"type" : "solr_date", "store" : "yes"}, "anchor" : {"type" : "string", "store" : "yes", "index" : "not_analyzed"}, "contentLength" : {"type" : "long", "store" : "yes"}, "lastModified" : {"type" : "solr_date", "store" : "yes"}, "lang" : {"type" : "string", "store" : "yes"}, "mimetype" : {"type" : "string", "store" : "yes", "index" : "not_analyzed"}, "type" : {"type" : "string", "store" : "yes", "index" : "not_analyzed"}, "label" : {"type" : "string", "store" : "yes", "index" : "not_analyzed"}, "role" : {"type" : "string", "store" : "yes", "index" : "not_analyzed"} }
  22. 22.  Fessでelasticsearch-solr-api経由でelasticsearch を利用してみる  Fess管理URL: http://127.0.0.1:8080/fess/admin  Fess検索URL: http://127.0.0.1:8080/fess/search?query=fess  elasticsearch検索URL: http://127.0.0.1:9200/solr/core1/_search? q=fess&pretty=true ※ 差分クロールはファンクションクエリーを利用し ているので利用できない デモ 22
  23. 23. Q&A 23

×