最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

elasticsearch插件開發(fā)教程

 更新時間:2017年06月28日 15:32:29   作者:wzjhoutai  
這篇文章主要為大家詳細(xì)介紹了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,所以須要對其類型進(jìn)行推斷
 @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)建自己的模塊集合
 //假設(shè)沒有自己定義模塊,則能夠返回空
 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)建自己的服務(wù)類集合,服務(wù)類須要繼承自LifecycleComponent。ES會自己主動創(chuàng)建出服務(wù)類實例,并調(diào)用其start方法
 //假設(shè)沒有自己定義服務(wù)類。則能夠返回空
 Collection<Class<?
 extends LifecycleComponent>> list = new ArrayList<>();
 list.add(HelloService.class);
 return list;
 }
 
}

Module類事實上就是定義了依賴注入規(guī)則。假設(shè)不清楚,能夠去查看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文件夾,又一次啟動就可以,當(dāng)你運行:
curl -GET localhost:9200/hello,就會返回對應(yīng)結(jié)果了。

三、為插件加入頁面

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

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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • JAVA不使用線程池來處理的異步的方法詳解

    JAVA不使用線程池來處理的異步的方法詳解

    這篇文章主要介紹了JAVA不使用線程池來處理的異步的方法,在這個示例中,asyncTask方法創(chuàng)建了一個新的線程來執(zhí)行異步任務(wù),這個新線程會立即開始執(zhí)行,而主線程則會繼續(xù)執(zhí)行后續(xù)的代碼,感興趣的朋友跟隨小編一起看看吧
    2024-05-05
  • JUC三大輔助類CountDownLatch、CyclicBarrier和Semaphore詳解

    JUC三大輔助類CountDownLatch、CyclicBarrier和Semaphore詳解

    這篇文章主要介紹了JUC三大輔助類CountDownLatch、CyclicBarrier和Semaphore詳解,CountDownLatch 類可以設(shè)置一個計數(shù)器,然后通過 countDown 方法來進(jìn)行 減 1 的操作,使用 await 方法等待計數(shù)器不大于 0,然后繼續(xù)執(zhí)行 await 方法 之后的語句,需要的朋友可以參考下
    2024-01-01
  • 基于Java實現(xiàn)Redis多級緩存方案

    基于Java實現(xiàn)Redis多級緩存方案

    這篇文章主要介紹了Redis多級緩存方案分享,傳統(tǒng)緩存方案、多級緩存方案、JVM本地緩存,舉例說明這些方案,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-03-03
  • Java如何使用ReentrantLock實現(xiàn)長輪詢

    Java如何使用ReentrantLock實現(xiàn)長輪詢

    這篇文章主要介紹了如何使用ReentrantLock實現(xiàn)長輪詢,對ReentrantLock感興趣的同學(xué),可以參考下
    2021-04-04
  • SSH框架網(wǎng)上商城項目第13戰(zhàn)之Struts2文件上傳功能

    SSH框架網(wǎng)上商城項目第13戰(zhàn)之Struts2文件上傳功能

    這篇文章主要為大家詳細(xì)介紹了SSH框架網(wǎng)上商城項目第13戰(zhàn)之Struts2文件上傳功能的相關(guān)資料,感興趣的小伙伴們可以參考一下
    2016-06-06
  • Java JUnit 使用及常用注解

    Java JUnit 使用及常用注解

    JUnit是Java開發(fā)中必不可少的測試框架之一,它可以幫助您編寫高質(zhì)量、可維護(hù)的單元測試,本文介紹了JUnit的基本用法、常用注解、測試套件和參數(shù)化測試等內(nèi)容,希望對您的測試工作有所幫助,感興趣的朋友一起看看吧
    2023-12-12
  • java的Object里wait()實現(xiàn)原理講解

    java的Object里wait()實現(xiàn)原理講解

    這篇文章主要介紹了java的Object里wait()實現(xiàn)原理,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • 深入了解Java線程池的原理使用及性能優(yōu)化

    深入了解Java線程池的原理使用及性能優(yōu)化

    JAVA線程池是一種管理和復(fù)用線程資源的機制,可以提高程序的效率和響應(yīng)速度。本文將介紹線程池的原理、使用方法和性能優(yōu)化技巧,幫助讀者深入了解和應(yīng)用JAVA線程池
    2023-04-04
  • Springboot實現(xiàn)郵箱驗證代碼實例

    Springboot實現(xiàn)郵箱驗證代碼實例

    這篇文章主要介紹了Springboot實現(xiàn)郵箱驗證代碼實例,在一些業(yè)務(wù)需求中我們經(jīng)常需要使用郵箱進(jìn)行驗證碼的收取,本文通過簡單的代碼實例來說明,需要的朋友可以參考下
    2024-01-01
  • java獲得平臺相關(guān)的行分隔符和java路徑分隔符的方法

    java獲得平臺相關(guān)的行分隔符和java路徑分隔符的方法

    不同系統(tǒng)平臺下的行分隔符、路徑分隔符等常常不同,如何在Java程序獲取當(dāng)前平臺的分隔符,以及其他系統(tǒng)相關(guān)的狀態(tài)呢?下面是示例程序,需要的朋友可以參考下
    2014-02-02

最新評論

峨眉山市| 商城县| 定安县| 辛集市| 宜君县| 商都县| 格尔木市| 佛教| 临猗县| 阆中市| 吴川市| 平江县| 昂仁县| 综艺| 霍城县| 禄劝| 双牌县| 宝山区| 霸州市| 布拖县| 庆阳市| 凤凰县| 伽师县| 望奎县| 大姚县| 新龙县| 英超| 松原市| 西昌市| 惠水县| 通城县| 岳阳县| 定陶县| 安宁市| 应城市| 尚志市| 巴楚县| 新龙县| 莱阳市| 瑞昌市| 韶关市|