原文地址:html
本文爲博主原創翻譯,轉載需請示。特別是http://www.mamicode.com/ 碼迷 這類垃圾網站。git
一個包含Java代碼的Java插件。這些例子提供了開始的必要的內容。關於如何編寫插件的更多信息,咱們建議查看本文中列出的插件,以得到靈感。github
全部插件文件必須在一個名爲elasticsearch的目錄下。apache
全部的插件必須在elasticsearch的目錄下有一個叫「plugin-descriptor.properties」的配置文件。具體的文件格式見連接:安全
https://github.com/elastic/elasticsearch/blob/master/buildSrc/src/main/resources/plugin-descriptor.propertieselasticsearch
descriptionide |
插件的簡短描述單元測試 |
version測試 |
插件版本 |
name |
插件名稱 |
classname |
插件的入口,須要實現plugin接口 |
java.version |
插件採用的java版本信息 |
elasticsearch.version |
匹配的elastic search版本 |
注意:在Elasticsearch目錄中只有jar文件被添加到該插件的類路徑中!若是您須要其餘資源,請將它們打包到一個資源jar中。
你必須在每個新的Elasticsearch版本發佈時更新插件版本。當插件被加載時,這個版本號就會被檢查,因此Elasticsearch在當前插件匹配的Elasticsearch版本不一致時會報錯。
當測試一個Java插件時,若是是在plugins/目錄下,會被自動加載的。能夠經過
bin/elasticsearch-plugin install file:///path/to/your/plugin
來安裝插件來測試。
有些插件可能須要額外的安全許可。一個插件能夠包含可選的plugin-security.policy文件,其中包含授予附加權限的grant語句聲明。任何附加的權限都將顯示給用戶一個大的警告,而且在安裝插件時必需要確認。所以,若是可能,最好避免請求任何僞造的權限!
若是你使用的是elasticsearch Gradle系統,請把這個文件放到src/main/plugin-metadata,而且它將會在單元測試中被應用。
請記住,Java安全模型是基於堆棧的,而且額外的權限只會被授予您的插件中的jar,所以您將在須要高級特權的操做上編寫適當的安全代碼。建議添加一個檢查來防止未特權的代碼(如腳本)得到升級的權限。例如
// ES permission you should check before doPrivileged() blocks
import org.elasticsearch.SpecialPermission;
SecurityManager sm = System.getSecurityManager();
if (sm != null) {
// unprivileged code such as scripts do not have SpecialPermission
sm.checkPermission(new SpecialPermission());
}
AccessController.doPrivileged(
// sensitive operation
);
http://blog.csdn.net/u012332735/article/details/62422279
開發一個elasticsearch插件須要的流程以下:
- 實現TokenFilter類(org.apache.lucene.analysis包) 用於修改和擴展token的內容
- AbstractTokenFilterFactory(org.elasticsearch.index.analysis包) 用於生成TokenFilter的實際對象,工廠模式
- AnalyzerProvider(org.elasticsearch.index.analysis包) 用於提供Analyzer示例
- AnalysisModule(org.elasticsearch.index.analysis包) 利用guice注入分析插件的名稱
- AbstractComponent(org.elasticsearch.common.component包) 核心組件,用於利用工廠來建立自定義的分析器(Analyzer)和過濾器(TokenFilter)
- AbstractModule(org.elasticsearch.common.inject包) 注入模塊,告訴AbstractComponent生成怎樣的實例
- AbstractPlugin(org.elasticsearch.plugins包) 告訴elasticsearch插件的
……………………………………………………………………
見原博客