Carpe Diem

備忘録

Elasticsearch plugin 作成方法 [1.x]

概要

Elasticsearchのプラグインの作成方法です。
1.xと2.xで色々と変更があるので、まずは1.xの作り方を学んでみます。

完成形は以下

github.com

環境

  • Ubuntu 14.04
  • Elasticsearch 1.4.5

プロジェクト作成

mavenからスケルトンコードを生成することができるので以下のコマンドで自動生成します。

$ mvn archetype:generate \
-DarchetypeGroupId=org.codelibs \
-DarchetypeArtifactId=elasticsearch-plugin-archetype \
-DarchetypeVersion=1.5.0 \
-DelasticsearchVersion=1.7.5 \
-DgroupId=com.github.jun06t \
-DartifactId=elasticsearch-sample \
-Dversion=1.7.5-SNAPSHOT \
-DpluginName=sample

フォルダ構造

.
├── README.md
├── pom.xml
└── src
    └── main
        ├── assemblies
        │   └── plugin.xml
        ├── java
        │   └── com
        │       └── github
        │           └── jun06t
        │               ├── samplePlugin.java
        │               ├── module
        │               │   └── sampleModule.java
        │               ├── rest
        │               │   └── sampleRestAction.java
        │               └── service
        │                   └── sampleService.java
        ├── main.iml
        └── resources
            └── es-plugin.properties

今回はRestAPIしか使用しないため、不要なコードを削除します。

$ rm -rf service/
$ rm -rf module/

samplePlugin.java

同様にコードも修正します

package com.github.jun06t;

import java.util.Collection;

import com.github.jun06t.rest.sampleRestAction;
import org.elasticsearch.plugins.AbstractPlugin;
import org.elasticsearch.rest.RestModule;

public class samplePlugin extends AbstractPlugin {
    @Override
    public String name() {
        return "samplePlugin";
    }

    @Override
    public String description() {
        return "This is a elasticsearch-sample plugin.";
    }

    // for Rest API
    public void onModule(final RestModule module) {
        module.addRestAction(sampleRestAction.class);
    }
}

インストール

コードが用意できたらパッケージを作成します。

$ mvn package

.jarファイルができたらインストールします。

$ sudo ./bin/plugin --url file:///${your_plugin_path}/elasticsearch-sample-1.7.5-SNAPSHOT.jar -i elasticsearch-sample

再起動します。

$ sudo service elasticsearch restart

動作確認

$ curl -s http://localhost:9200/test_index/_hello | jq .
{
  "description": "This is a elasticsearch-sample response: Mon Feb 15 05:56:38 UTC 2016",
  "type": null,
  "index": "test_index"
}

以上です。お疲れ様でした。

ソース