环境:
操作系统:win7
elasticsearch版本:5.4.4
java:1.8
参考文章:
3、java操作ElasticSearch(es)进行增删查改操作
7、Elasticsearch 5.X下JAVA API使用指南
——————————————————————————————————————
9、elasticsearch5.2.2 插件开发(二) 第一个有实际功能的插件 - CSDN博客
10、elasticsearch5.2.2 插件开发(三)ScriptPlugin 的实现 - CSDN博客
——————————————————————————————————————
11、Maven通俗讲解
12、如何添加本地JAR文件到Maven项目中 - CSDN博客
14、maven系列--maven添加第三方、本地依赖 - CSDN博客
15、Maven配置项目依赖使用本地仓库的方法汇总 - EasonJim - 博客园
有关打包部分的视频在我的百度网盘
链接:https://pan.baidu.com/s/1DuIWN2uDtcA8guP_Ny91Vw 密码:tj65
第一部分:代码
一、创建maven项目
首先创建一个maven项目,填写Group Id为com.plugin和Artifact Id为esPlugin。其中Artifact Id是项目名,Group Id是项目中包的名字。
二、修改pom.xml配置文件
修改pom.xml文件,然后右键项目名->maven->update maven。会发现在Maven Dependencies文件夹下多了很多包(见下图),这些都是pom.xml文件添加进去的依赖,省去了手动导包的麻烦。(包全是在maven的中央仓库下载到本地的,pom.xml代码见页面底部。)
三、核心代码实现
代码目录如下(用的是之前的项目的截图,忽略顶部的包名),在文后的链接中下载项目,会有这么多包,真正用到的和需要修改的类是TasteEventRestAction.java,这里面包括注册URL,以及执行对应的操作。
package com.taste.elasticsearch_taste.rest;
import static com.taste.elasticsearch_taste.action.LoggerUtils.emitErrorResponse;
import static org.elasticsearch.rest.RestRequest.Method.POST;
import java.io.File;
import java.io.IOException;
import org.elasticsearch.action.ActionListener;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.node.NodeClient;
import org.elasticsearch.common.inject.Inject;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.xcontent.ToXContent;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.rest.BaseRestHandler;
import org.elasticsearch.rest.BytesRestResponse;
import org.elasticsearch.rest.RestController;
import org.elasticsearch.rest.RestRequest;
import org.elasticsearch.rest.RestStatus;
import org.elasticsearch.rest.action.search.RestSearchAction;
import org.elasticsearch.search.SearchHits;
import com.pligin.esPlugin.action.TasteEventAction;
import com.pligin.esPlugin.common.TasteEventRequestBuilder;
import com.pligin.esPlugin.common.TasteEventResponse;
//我项目中的类
//import ding.util.ESUtil.ActionParameter;
//import ding.util.WEKAUtil.MeachineLearningBuilder;
public class TasteEventRestAction extends BaseRestHandler{
public ActionParameter parameter;
@Inject
public TasteEventRestAction(final Settings settings,final RestController restController) {
super(settings);
restController.registerHandler(RestRequest.Method.GET, "/_taste/{action}", this); // 注册URL1,该URL中最后的字符串赋给变量action
restController.registerHandler(RestRequest.Method.GET, "/_taste", this); // 注册URL2
}
@Override
protected RestChannelConsumer prepareRequest(RestRequest request, NodeClient client) throws IOException {
if (request.method() == POST && !request.hasContent()) {
return channel -> emitErrorResponse(channel, logger, new IllegalArgumentException("Req