ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

elasticsearch6 插件开发变动

2019-07-06 17:54:36  阅读:321  来源: 互联网

标签:插件 return String script 变动 elasticsearch6 org import public


es6不支持native

插件开发中会有一些变化

官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/6.0/modules-scripting-engine.html?nsukey=TC4GNoi7V8SGUZSDocHVHesIeUCTyhBXqud%2BLvKwpuJmmkljLok8itiwuQawSXefZ9Jpy09GCSbKtUBSmTNs6IZmoH9wYePp4zb6Mr1IoS6gopicq56c%2FhIsnXM4x3UAmj%2FklieHp%2FlnSv4iQTTGgeHr%2BO5Cvh0c7bXINcqWxuNMZhPnVzEM5otr8g9JfQRpFEZ0Rq20ffXo36Usc3Ki7Q%3D%3D

 

需要实现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. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有