[JAVA] Erstellen einer Elasticsearch-Plugin-Serie (1) Hello World

In dieser Serie werde ich die grundlegende Methode zum Schreiben eines Plugins für Elastic Search erläutern. Teil 1 erstellt eine REST-API, die "Hello World" anzeigt. Die erstellte Quelle finden Sie unter github.

Zweck

Erstellen Sie ein Elasticsearch-Plugin, das "Hello Wolrd" anzeigt, wenn Sie auf die angegebene URL zugreifen.

Implementierungsübersicht

Verwenden Sie das Gradle-Plug-In, um ein Elasticsearch-Plugin zu erstellen. Dieses Plug-In ist in Elasticsearchs OSS enthalten, es gibt jedoch fast keine Dokumente, und die Betriebsspezifikationen können sich aufgrund größerer Versions-Upgrades ändern. Daher ist es notwendig, diese Risiken bei der Verwendung zu berücksichtigen. Es scheint, dass die Downloadquelle des Elasticsearch-Moduls die interne URL für das Gradle-Plug-In der 7er-Serie ist. Infolgedessen kann das Gradle-Plug-In Elasticsearch nicht zum Testen starten. In diesem Tutorial laden Sie Elasticsearch separat herunter, installieren das Plugin manuell und starten Elasticsearch.

Betriebsumgebung

** Für das Gradle-Plug-In für Elasticsearch 7.4.2 ist Java 12 oder höher erforderlich. Gradle 6.0 ist erforderlich, um mit Java zu arbeiten 13). Aus diesem Grund wird diese Kombination derzeit beim Erstellen eines Elasticsearch 7.4-Plug-Ins verwendet.) **

Notation im Artikel

Vorbereitungen

--Installieren Sie Elasticsearch OSS-Version. Erweitern Sie auf [ELASTICSEARCH_DIR].

Projektvorbereitung

Das Projekt wird in [PROJECT_DIR] platziert.

Das Projekt wird die folgende Struktur haben

Erstellen Sie settings.gradle

Da dies eine einzelne Projektkonfiguration ist, geben Sie nur den Projektnamen an. Der Projektname ist das Präfix der JAR-Datei oder der Projektname, wenn er in eine Entwicklungsumgebung wie Eclipse importiert wird.

rootProject.name = 'elasticsearch-sample-plugins'

Erstellen Sie build.gradle

Nehmen Sie spezielle Einstellungen zum Erstellen der JVM-Version (Zielversion) der Betriebsumgebung und des Elasticsearch-Plug-Ins vor.

buildscript {
	repositories {
		mavenLocal()
		mavenCentral()
		jcenter()
	}
    dependencies {
 // Elasticsearch veröffentlicht Build-Tools im zentralen Repository von maven.
    	// https://mvnrepository.com/artifact/org.elasticsearch.gradle/build-tools
    	classpath group: 'org.elasticsearch.gradle', name: 'build-tools', version: '7.4.2'		
    }
}

plugins {
	id 'java'
 // Maven erforderlich, um Abhängigkeiten aufzulösen
	id 'maven'
 // Erforderlich, wenn Eclipse als Entwicklungsumgebung verwendet wird
	id 'eclipse'
}

 // Der Name des Gradle-Plugins zum Erstellen des Plugins
apply plugin: 'elasticsearch.esplugin'

sourceCompatibility = 1.8
 // Stellen Sie sicher, dass die Elasticsearch-Laufzeit mit JDK 1.8 funktioniert.
targetCompatibility = 1.8

group = 'taka8.elasticsearch.plugins'
version = '0.0.1'

repositories {
	mavenLocal()
	mavenCentral()
	jcenter()
}
[compileJava, compileTestJava, javadoc]*.options*.encoding = 'UTF-8'

eclipse {
	 classpath {
		containers.clear()
		downloadSources = true
		downloadJavadoc = true
	}
}

ext {
 // Wenn Sie die folgenden beiden nicht festlegen, führt der Plug-In-Build zu einem Fehler
	licenseFile = project.file('LICENSE')
	noticeFile = project.file('NOTICE')
}

esplugin {
 // Plugin Name
	name project.name
	
 // Plugin Beschreibung
	description 'Elasticsearch sample plugin'
	
 // Klasse, die der Eingang zum Stecker ist
	classname 'taka8.elasticsearch.plugins.SamplePlugin'
}

Vorbereitung der Plug-In-Quelle

Erstellen Sie eine Klasse, die als Einstiegspunkt für das Plug-In dient

Erstellen Sie eine Klasse mit dem Klassennamen (FQCN) in esplugin.classname von build.gradle unter "src / main / java".

SamplePlugin.java


package taka8.elasticsearch.plugins;

import java.util.Arrays;
import java.util.List;
import java.util.function.Supplier;

import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver;
import org.elasticsearch.cluster.node.DiscoveryNodes;
import org.elasticsearch.common.settings.ClusterSettings;
import org.elasticsearch.common.settings.IndexScopedSettings;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.settings.SettingsFilter;
import org.elasticsearch.plugins.ActionPlugin;
import org.elasticsearch.plugins.Plugin;
import org.elasticsearch.rest.RestController;
import org.elasticsearch.rest.RestHandler;

import taka8.elasticsearch.rest.HelloWorldAction;

//Wenn Sie ein Plugin für die REST-API erstellen, müssen Sie das ActionPlugin implementieren.
public class SamplePlugin extends Plugin implements ActionPlugin {

	//Gibt eine Liste der von diesem Plugin definierten RestHandler zurück
	@Override
	public List<RestHandler> getRestHandlers(Settings settings, RestController restController,
			ClusterSettings clusterSettings, IndexScopedSettings indexScopedSettings, SettingsFilter settingsFilter,
			IndexNameExpressionResolver indexNameExpressionResolver, Supplier<DiscoveryNodes> nodesInCluster) {
		return Arrays.asList(//
				//Ursprünglich definierte Klasse(Return Hello World String
				new HelloWorldAction(restController));
	}

}

Erstellen Sie einen RestHandler

HelloWorldAction.java


package taka8.elasticsearch.rest;

import static org.elasticsearch.rest.RestRequest.Method.GET;
import static org.elasticsearch.rest.RestRequest.Method.HEAD;

import java.io.IOException;

import org.elasticsearch.client.node.NodeClient;
import org.elasticsearch.rest.BaseRestHandler;
import org.elasticsearch.rest.BytesRestResponse;
import org.elasticsearch.rest.RestController;
import org.elasticsearch.rest.RestRequest;
import org.elasticsearch.rest.RestResponse;
import org.elasticsearch.rest.RestStatus;

//RestHandler, der die REST-API akzeptiert, kann einfach durch Erben von BaseRestHandler erstellt werden
public class HelloWorldAction extends BaseRestHandler {

	public HelloWorldAction(final RestController controller) {
		assert controller != null;
		//Definieren Sie den Pfad zum Akzeptieren der Anforderung.
		controller.registerHandler(GET, "/hello", this);
		controller.registerHandler(HEAD, "/hello", this);
	}

	//Definieren Sie den Namen von RestHandler.
	//Machen Sie den Namen für die Menschen leicht sichtbar.
	//Wird in APIs verwendet, die die Verwendung zurückgeben
	@Override
	public String getName() {
		return "hello_word_action";
	}

	@Override
	protected RestChannelConsumer prepareRequest(RestRequest request, NodeClient client) throws IOException {
		return channel -> {
			RestResponse response = new BytesRestResponse(RestStatus.OK, "Hello World");
			//Schreiben Sie eine Antwort auf den Kanal
			channel.sendResponse(response);
		};
	}

}

Funktionsprüfung

Umgebungsvariablen einstellen

>set JAVA_HOME=[JAVA_DIR]
>set PATH=[GRADLE_DIR]\bin;%PATH%

Bauen

>gradle install

PIugin installieren

>cd [ELASTICSEARCH_DIR]
>.\bin\elasticsearch-plugin install file:/[PROJECT_DIR]/build/distributions/elasticsearch-sample-plugins-0.0.1.zip

** PROJECT_DIR sollte in URL-Notation sein **

Starten Sie Elasticsearch

>cd [ELASTICSEARCH_DIR]
>.\bin\elasticsearch

Bildschirmprüfung

Gehen Sie mit Ihrem Browser zu http : // localhost: 9200 / hello und überprüfen Sie, ob "Hello World" angezeigt wird.

Nachwort

Ich fand es einfach, Elasticsearch-Plugins mit dem Gradle-Plugin zum Erstellen von Plugins zu erstellen. Dies ist in der tatsächlichen Entwicklung wenig sinnvoll, aber Elasticsearch verfügt tatsächlich über einen API-Zugriffsteil, der fast genauso wie ein Plug-In erstellt wurde, sodass Sie ein Plug-In mit relativ hoher Leistung erstellen können. Ab dem nächsten Mal werde ich erklären, wie erweiterte Plug-Ins erstellt werden.

Recommended Posts

Erstellen einer Elasticsearch-Plugin-Serie (1) Hello World
Erstellen einer Elasticsearch Plugin Series (2) Suche
Hallo Welt für ImageJ Java Plugin
Lesen Sie "Hallo Welt"
Java, Hallo Welt!
Java Hallo Welt
"Hallo Welt" in Java
Java lernen (1) -Hallo Welt
Lesen Sie System.out.println ("Hallo Welt")
Schreiben wir Hello World
Hallo Welt in Java
Java-Teil 1-Hallo Welt studieren
Hallo Welt mit Web Assembly
Hallo Welt mit Micronaut