标签:插件 return String script 变动 elasticsearch6 org import public
es6不支持native
插件开发中会有一些变化
需要实现ScriptEngine接口
插件入口
package com.esplugin.demo; import java.util.Collection; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.plugins.Plugin; import org.elasticsearch.plugins.ScriptPlugin; import org.elasticsearch.script.ScriptContext; import org.elasticsearch.script.ScriptEngine; public class DemoPlugin extends Plugin implements ScriptPlugin { @Override public ScriptEngine getScriptEngine(Settings settings, Collection<ScriptContext<?>> contexts) { return new MyScriptEngine(); } }
其中getType方法中return的就是script的lang;插件名称在complile中用if判断,scriptSource为插件名称,执行插件逻辑
package com.esplugin.demo; import java.io.IOException; import java.util.Map; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.apache.lucene.index.LeafReaderContext; import org.elasticsearch.script.ScriptContext; import org.elasticsearch.script.ScriptEngine; import org.elasticsearch.script.SearchScript; public class MyScriptEngine implements ScriptEngine { private final static Logger logger = LogManager.getLogger(MyScriptEngine.class); @Override public String getType() { //return "demoPlugin"; // script name return "myscript"; } @Override public <T> T compile(String scriptName, String scriptSource, ScriptContext<T> context, Map<String, String> params) { logger.info("use params the scriptName {} ,scriptSource {}, context {},params {}",scriptName,scriptSource,context.name,params.entrySet()); if (!context.equals(SearchScript.CONTEXT)) { throw new IllegalArgumentException(getType() + " scripts cannot be used for context [" + context.name + "]"); } // final String first = XContentMapValues.nodeStringValue(params.get("first"), null); // final String second = XContentMapValues.nodeStringValue(params.get("second"), null); // logger.info("this is first value : {} ,second : {} ", first, second); if("demoPlugin".equals(scriptSource)){ SearchScript.Factory factory = (p, lookup) -> new SearchScript.LeafFactory() { final String field = p.containsKey("field")?(String)p.get("field"):""; final String text = p.containsKey("text")?(String)p.get("text"):""; @Override public SearchScript newInstance(LeafReaderContext context) throws IOException { return new SearchScript(p, lookup, context) { @Override public double runAsDouble() { final String test = (String) lookup.source().get(field); if (test.indexOf(text) >= 0){ return 1.0D; } return Double.MAX_VALUE; } }; } @Override public boolean needs_score() { return false; } }; return context.factoryClazz.cast(factory); } throw new IllegalArgumentException("Unknown script name " + scriptSource); } @Override public void close() { // optionally close resources } }
查询如下,lang中为getType中的renturn值,source为插件名,params为参数
GET index/_search
{ "query": { "function_score": { "query": { "match_all": {} }, "script_score": { "script": { "source": "demoPlugin", "lang": "myscript", "params": { "field": "test", "text": "1" } } } } } }
标签:插件,return,String,script,变动,elasticsearch6,org,import,public 来源: https://www.cnblogs.com/wfox111/p/11143495.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。