ES中,有一類參數是能夠動態調整的,好比副本數量: number_of_replicas
。
在插件開發中,如何添加本身的自定義參數呢?
在插件的入口,添加onModule(ClusterModule module)
便可。json
public class ShgyPlugin extends Plugin { @Override public String name() { return "shgy-plugin"; } @Override public String description() { return "shgy plugin "; } public void onModule(ClusterModule module){ module.registerIndexDynamicSetting("index.custom_setting", new Validator() { @Override public String validate(String setting, String value, ClusterState clusterState) { if (value == null) { throw new NullPointerException("value must not be null"); } return null; } }); } }
編譯代碼,安裝插件後,使用以下的腳本測試:app
curl -X PUT "localhost:9200/twitter/_settings" -H 'Content-Type: application/json' -d' { "index" : { "custom_setting" : 2 } }' curl -XGET 'http://localhost:9200/twitter/_settings?pretty'
在代碼中使用參數,通常是在TransportAction中使用, 代碼片斷以下:curl
ClusterState clusterState = clusterService.state(); clusterState.blocks().globalBlockedRaiseException(ClusterBlockLevel.READ); String concreteSingleIndex = indexNameExpressionResolver.concreteSingleIndex(clusterState, request); IndexMetaData indexMeta = clusterState.getMetaData().index(concreteSingleIndex); int sectionCnt = indexMeta.getSettings().getAsInt("index.custom_settings",-1);
即經過clusterService獲取到clusterState, 而後獲取到IndexMetaData, 而後獲取到Settings。ide
自定義動態參數, 配合templates的使用,就不須要頻繁手動建立索引了。 這個知識點應該概括到 ES插件開發的一部分。測試