[JAVA] Création d'une série de plugins Elasticsearch (1) Hello World

Dans cette série, j'expliquerai la manière de base d'écrire un plugin pour Elastic search. La partie 1 créera une API REST qui affiche "Hello World". La source créée peut être trouvée sur github.

Objectif

Créez un plug-in Elasticsearch qui affichera "Hello Wolrd" lorsque vous accédez à l'URL spécifiée.

Aperçu de la mise en œuvre

Utilisez le plug-in Gradle pour créer un plug-in Elasticsearch. Ce plug-in est inclus dans l'OSS d'Elasticsearch, mais il y a peu de documents, etc., et les spécifications de fonctionnement peuvent changer en raison de mises à niveau majeures de version, etc. Par conséquent, il est nécessaire de prendre en compte ces risques lors de son utilisation. Il semble que la source de téléchargement du module Elasticsearch soit l'URL interne du plug-in Gradle de la série 7. En conséquence, le plug-in gradle ne parvient pas à lancer Elasticsearch pour les tests. Dans ce didacticiel, vous allez télécharger Elasticsearch séparément, installer manuellement le plug-in et lancer Elasticsearch.

Environnement d'exploitation

** Le plug-in Gradle pour Elasticsearch 7.4.2 nécessite Java 12 ou supérieur. Gradle 6.0 est requis pour fonctionner avec Java 13). Pour cette raison, cette combinaison est actuellement utilisée lors de la création d'un plug-in Elasticsearch 7.4.) **

Notation dans l'article

Préparation préalable

--Installer Elasticsearch version OSS Développer jusqu'à [ELASTICSEARCH_DIR] --Installez Gradle version RC Développer jusqu'à [GRADLE_DIR]

Préparation du projet

Le projet doit être placé dans [PROJECT_DIR].

Le projet aura la structure suivante

--place la source java qui est la source de la classe fournie dans src / main / java jar. --Placez diverses ressources regroupées dans le jar src / main / resources. --src / main / plugin-metadata Placez des paramètres uniques pour les plugins Eclipse tels que les politiques de sécurité. --src / test / java Place la source java pour le test. --src / test / resources Place diverses ressources pour les tests. --settings.gradle Ce fichier est nécessaire pour définir la configuration du projet. --build.gradle Ce fichier est nécessaire pour définir les tâches lors de la construction d'un projet.

Créer des paramètres.

Puisqu'il s'agit d'une configuration de projet unique, spécifiez uniquement le nom du projet. Le nom du projet sera le préfixe du fichier jar ou le nom du projet lors de l'importation dans un environnement de développement tel qu'Eclipse.

rootProject.name = 'elasticsearch-sample-plugins'

Créer build.gradle

Définissez des paramètres spécifiques pour créer la version JVM (targetVersion) de l'environnement d'exploitation et du plug-in Elasticsearch.

buildscript {
	repositories {
		mavenLocal()
		mavenCentral()
		jcenter()
	}
    dependencies {
 // Elasticsearch publie des outils de construction dans le référentiel central de 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 requis pour résoudre les dépendances
	id 'maven'
 // Requis lors de l'utilisation d'Eclipse comme environnement de développement
	id 'eclipse'
}

 // Le nom du plug Gradle pour construire le plug
apply plugin: 'elasticsearch.esplugin'

sourceCompatibility = 1.8
 // Assurez-vous que le runtime Elasticsearch fonctionne avec JDK 1.8.
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 {
 // Si vous ne définissez pas les deux suivants, la construction du plug-in entraînera une erreur
	licenseFile = project.file('LICENSE')
	noticeFile = project.file('NOTICE')
}

esplugin {
 // Nom du plugin
	name project.name
	
 // Description du plugin
	description 'Elasticsearch sample plugin'
	
 // Classe qui est l'entrée de la prise
	classname 'taka8.elasticsearch.plugins.SamplePlugin'
}

Préparation de la source du plug-in

Créez une classe qui sera le point d'entrée du plug-in

Créez une classe avec le nom de classe (FQCN) défini dans esplugin.classname de build.gradle sous "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;

//Lors de la création d'un plugin pour l'API REST, vous devez implémenter l'ActionPlugin.
public class SamplePlugin extends Plugin implements ActionPlugin {

	//Renvoie une liste de RestHandlers définis par ce plugin
	@Override
	public List<RestHandler> getRestHandlers(Settings settings, RestController restController,
			ClusterSettings clusterSettings, IndexScopedSettings indexScopedSettings, SettingsFilter settingsFilter,
			IndexNameExpressionResolver indexNameExpressionResolver, Supplier<DiscoveryNodes> nodesInCluster) {
		return Arrays.asList(//
				//Classe définie à l'origine(Renvoyer la chaîne Hello World
				new HelloWorldAction(restController));
	}

}

Créer un 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 qui accepte l'API REST est facile à créer en héritant de BaseRestHandler
public class HelloWorldAction extends BaseRestHandler {

	public HelloWorldAction(final RestController controller) {
		assert controller != null;
		//Définissez le chemin pour accepter la demande.
		controller.registerHandler(GET, "/hello", this);
		controller.registerHandler(HEAD, "/hello", this);
	}

	//Définissez le nom de RestHandler.
	//Rendez le nom facile à voir pour les gens.
	//Utilisé dans les API qui retournent l'utilisation
	@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");
			//Ecrire une réponse à la chaîne
			channel.sendResponse(response);
		};
	}

}

Contrôle de fonctionnement

Définition des variables d'environnement

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

Construire

>gradle install

Installer le plugin

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

** PROJECT_DIR doit être en notation URL **

Lancer Elasticsearch

>cd [ELASTICSEARCH_DIR]
>.\bin\elasticsearch

Vérification d'écran

Allez sur http : // localhost: 9200 / hello avec votre navigateur et vérifiez que "Hello World" est affiché.

Épilogue

J'ai trouvé facile de créer des plugins Elasticsearch en utilisant le plugin Gradle pour créer des plugins. Cela n'a pas de sens dans le développement réel, mais Elasticsearch a en fait une partie d'accès à l'API créée presque de la même manière qu'un plug-in, vous pouvez donc créer un plug-in assez performant. Dès la prochaine fois, j'expliquerai comment créer des plug-ins plus avancés.

Recommended Posts

Création d'une série de plugins Elasticsearch (1) Hello World
Création d'une série de plugins Elasticsearch (2) Recherche
Hello World pour le plugin Java ImageJ
Lire "Hello world"
Java, bonjour le monde!
Java Hello World
"Hello World" en Java
Apprendre Java (1) - Hello World
Lire System.out.println ("bonjour, monde")
Écrivons Hello World
Hello World en Java
Étudier Java-Partie 1-Hello World
Hello World avec Web Assembly
Hello World avec Micronaut