ES插件開發之--如何添加自己的動態設置項
阿新 • • 發佈:2018-09-26
ssi 應該 pointer 開發 template turn repl evel str ES中,有一類參數是可以動態調整的,比如副本數量:
在插件開發中,如何添加自己的自定義參數呢?
在插件的入口,添加
number_of_replicas
。在插件開發中,如何添加自己的自定義參數呢?
在插件的入口,添加
onModule(ClusterModule module)
即可。
public class ShgyPlugin extends Plugin { @Override public String name() { return "shgy-plugin"; } @Override public String description() { return "shgy plugin for bitmap"; } 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; } }); } }
編譯代碼,安裝插件後,使用如下的腳本測試:
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中使用, 代碼片段如下:
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。
自定義動態參數, 配合templates的使用,就不需要頻繁手動創建索引了。 這個知識點應該歸納到 ES插件開發的一部分。
ES插件開發之--如何添加自己的動態設置項