亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

elasticsearch插件開發(fā)教程

 更新時間:2017年06月28日 15:32:29   作者:wzjhoutai  
這篇文章主要為大家詳細介紹了elasticsearch插件開發(fā)教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下

檢索引擎Elasticsearch支持插件模式。有些時候你可能須要安裝一些插件。甚至自己開發(fā)插件,這里就提供一個開始ES插件開發(fā)演示樣例,ES版本號為1.5.2。

一、插件類繼承自org.elasticsearch.plugins.AbstractPlugin

package org.elasticsearch.plugin.helloworld;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;

import org.elasticsearch.common.component.LifecycleComponent;
import org.elasticsearch.common.inject.Module;
import org.elasticsearch.common.logging.ESLogger;
import org.elasticsearch.common.logging.Loggers;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.plugins.AbstractPlugin;
import org.elasticsearch.rest.RestModule;

public class HelloWorldPlugin extends AbstractPlugin {
 final ESLogger logger = Loggers.getLogger(getClass());

 @Override
 public String name() {
 //插件名稱
 return "HelloWorld";
 }

 @Override
 public String description() {
 //插件描寫敘述
 return "Hello World Plugin";
 }
 
 //處理模塊,由于系統(tǒng)中有非常多種Module,所以須要對其類型進行推斷
 @Override
 public void processModule(Module module) {
 if(module instanceof RestModule) {
  ((RestModule)module).addRestAction(HelloWorldHandler.class);
 }
 
 if(module instanceof HelloModule) {
  logger.info("############## process hello module #####################");
 }
 }
 
 @Override
 public Collection<Module> modules(Settings settings) {
 //創(chuàng)建自己的模塊集合
 //假設沒有自己定義模塊,則能夠返回空
 HelloModule helloModule = new HelloModule();
 ArrayList<Module> list = new ArrayList<>();
 list.add(helloModule);
 Collections.unmodifiableList(list);
 return list;
 }
 
 @SuppressWarnings("rawtypes")
 @Override
 public Collection<Class<? extends LifecycleComponent>> services() {
 //創(chuàng)建自己的服務類集合,服務類須要繼承自LifecycleComponent。ES會自己主動創(chuàng)建出服務類實例,并調用其start方法
 //假設沒有自己定義服務類。則能夠返回空
 Collection<Class<?
 extends LifecycleComponent>> list = new ArrayList<>();
 list.add(HelloService.class);
 return list;
 }
 
}

Module類事實上就是定義了依賴注入規(guī)則。假設不清楚,能夠去查看Google Guice的文檔,基本上是一致的。如上例中的HelloModule:

package org.elasticsearch.plugin.helloworld;

import org.elasticsearch.common.inject.AbstractModule;
import org.elasticsearch.common.inject.Scopes;

public class HelloModule extends AbstractModule {

 @Override
 protected void configure() {
 //將InjectableService接口類型綁定到InjectableServiceImpl實現(xiàn)類
 //在須要注入InjectableService的地方,就會使用InjectableServiceImpl實例
 bind(InjectableService.class).to(InjectableServiceImpl.class);
 //使HelloService為單例狀態(tài)
 bind(HelloService.class).in(Scopes.SINGLETON);
 }
 
}

不同的模塊有不同的處理方式,比如樣例中對于RestModule,加入了一個Handler:

package org.elasticsearch.plugin.helloworld;

import org.elasticsearch.client.Client;
import org.elasticsearch.common.inject.Inject;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.rest.BaseRestHandler;
import org.elasticsearch.rest.BytesRestResponse;
import org.elasticsearch.rest.RestChannel;
import org.elasticsearch.rest.RestController;
import org.elasticsearch.rest.RestRequest;
import org.elasticsearch.rest.RestStatus;
import org.elasticsearch.rest.RestRequest.Method;
import org.elasticsearch.rest.RestResponse;


public class HelloWorldHandler extends BaseRestHandler {

 //注入對象
  @Inject
  protected HelloWorldHandler(Settings settings, RestController controller, Client client) {
 super(settings, controller, client);
 //將該Handler綁定到某訪問路徑
 controller.registerHandler(Method.GET, "/hello/", this);
 controller.registerHandler(Method.GET, "/hello/{name}", this);
 }

 //處理綁定路徑的請求訪問
 @Override
 protected void handleRequest(RestRequest request, RestChannel channel, Client client) throws Exception {
 logger.debug("HelloWorldAction.handleRequest called");
 final String name = request.hasParam("name") ? request.param("name") : "world";
 
 String content = "{\"success\":true, \"message\":\"hello " +name+ "\"}";
 
 RestResponse response = new BytesRestResponse(RestStatus.OK, BytesRestResponse.TEXT_CONTENT_TYPE, content);
 channel.sendResponse(response);
 }
}

最后在類路徑根文件夾下加入一個名為es-plugin.properties屬性文件,指定插件實現(xiàn)類:

plugin=org.elasticsearch.plugin.helloworld.HelloWorldPlugin

二、將插件打成jar包后安裝

如果ES_HOME代表Elasticsearch安裝文件夾。在ES_HOME/plugins文件夾下創(chuàng)建一個名為HelloWorld的文件夾。該文件夾名稱必須與插件名稱同樣(區(qū)分大寫和小寫),然后將jar包拷貝至HelloWorld文件夾,又一次啟動就可以,當你運行:
curl -GET localhost:9200/hello,就會返回對應結果了。

三、為插件加入頁面

假設你想為你的插件加入訪問頁面。則能夠在ES_HOME/plugins/HelloWorld文件夾下創(chuàng)建一個名為"_site"的文件夾,該文件夾名稱必須為_site,然后將對應的html頁面放置進_site文件夾就可以,假設放置了一個名為index.html文件,則能夠通過

localhost:9200/_plugin/HelloWorld/index.html進行訪問。
因為Elasticsearch提供了jsclientAPI。所以使用html靜態(tài)頁面與js就能夠完畢對應的功能了。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • SpringBoot中郵件任務的使用

    SpringBoot中郵件任務的使用

    這篇文章主要介紹了SpringBoot中郵件任務的使用,SpringBoot?郵件任務是指使用SpringBoot框架來實現(xiàn)郵件發(fā)送和接收的功能,通過SpringBoot的自動配置和簡化的開發(fā)流程,我們可以輕松地集成郵件功能到我們的應用程序中,需要的朋友可以參考下
    2023-10-10
  • springCloud中的Sidecar多語言支持詳解

    springCloud中的Sidecar多語言支持詳解

    這篇文章主要介紹了springCloud中的Sidecar多語言支持詳解,Sidecar是將一組緊密結合的任務與主應用程序共同放在一臺主機Host中,但會將它們部署在各自的進程或容器中,需要的朋友可以參考下
    2024-01-01
  • JPA如何使用findBy方法自定義查詢

    JPA如何使用findBy方法自定義查詢

    這篇文章主要介紹了JPA如何使用findBy方法自定義查詢,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • 詳解SpringMVC中的四種跳轉方式、視圖解析器問題

    詳解SpringMVC中的四種跳轉方式、視圖解析器問題

    這篇文章主要介紹了SpringMVC的四種跳轉方式、視圖解析器,springmvc核心配置文件和視圖解析器的使用,添加視圖解析器,通過案例講解四種跳轉方式,需要的朋友可以參考下
    2022-10-10
  • Java中static關鍵字的作用和用法詳細介紹

    Java中static關鍵字的作用和用法詳細介紹

    這篇文章主要介紹了Java中static關鍵字的作用和用法詳細介紹,本文講解了static變量、靜態(tài)方法、static代碼塊、static和final一塊用等內容,需要的朋友可以參考下
    2015-01-01
  • 基于Java檢查IPv6地址的合法性

    基于Java檢查IPv6地址的合法性

    這篇文章主要介紹了基于Java檢查IPv6地址的合法性,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-01-01
  • Java中EasyPoi導出復雜合并單元格的方法

    Java中EasyPoi導出復雜合并單元格的方法

    這篇文章主要介紹了Java中EasyPoi導出復雜合并單元格的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • java并發(fā)編程中ReentrantLock可重入讀寫鎖

    java并發(fā)編程中ReentrantLock可重入讀寫鎖

    這篇文章主要介紹了java并發(fā)編程中ReentrantLock可重入讀寫鎖,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-05-05
  • Tk.mybatis零sql語句實現(xiàn)動態(tài)sql查詢的方法(4種)

    Tk.mybatis零sql語句實現(xiàn)動態(tài)sql查詢的方法(4種)

    有時候,查詢數(shù)據(jù)需要根據(jù)條件使用動態(tài)查詢,這時候需要使用動態(tài)sql,本文主要介紹了Tk.mybatis零sql語句實現(xiàn)動態(tài)sql查詢的方法,感興趣的可以了解一下
    2021-12-12
  • gson ajax 數(shù)字精度丟失問題的解決方法

    gson ajax 數(shù)字精度丟失問題的解決方法

    下面小編就為大家?guī)硪黄猤son ajax 數(shù)字精度丟失問題的解決方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03

最新評論