*elasticsearch(后面简称es)

  • 背景: 目前项目应用中对es的操作用的是http(自己封装)的一套方法;有些数据处理起来还是需要定制开发处理,不是很方便。正好需要对本项目重新进行改造,于是采用第三方工具包jest 对es的操作进行重新的梳理改造。

  • why use jest

    官方有个大致的介绍:Jest is a Java HTTP Rest client for ElasticSearch.It is actively developed and tested by Searchly.

    jset优势

    1)提供Restful API, 原生ES API不具备;

    2)Jest支持不同版本的es基本操作 主要是http rest client;

  • maven 管理项目:

    <dependency>
    <groupId>io.searchbox</groupId>
    <artifactId>jest</artifactId>
    <version>2.0.3</version>
    </dependency>
  • jest使用

    网上有很多(上述图片中)的方法实例,下面就不具体的介绍了(链接如下)

    http://blog.csdn.net/u010466329/article/details/75020956

    https://github.com/searchbox-io/Jest

    结合源代码封装了一个可以直接传递url的method,该方法的实现就是结合了jest 源码,实现了自己想要的接口(用于用户页面自定义查询 更方便)。 代码如下:

    AbstractLocalHttpAction (本地HttpAction)

       /**
    * methodName "http" "delete" "put" "get" “post”
    * queryParam 参数
    * url 请求链接
    */
    public abstract class AbstractLocalHttpAction <T extends JestResult> extends AbstractAction<T> { protected String methodName; private String queryParam; private String url; public AbstractLocalHttpAction(AbstractLocalHttpAction.Builder builder) {
    super(builder);
    this.queryParam = builder.queryParam;
    this.methodName = builder.methodName;
    this.url = builder.url;
    } public String getMethodName() {
    return this.methodName;
    } public String getQueryParam() {
    return this.queryParam;
    } public String getUrl() {
    return this.url;
    } protected String buildURI() {
    StringBuilder sb = new StringBuilder(super.buildURI()); return sb.toString();
    } protected abstract static class Builder<T extends AbstractLocalHttpAction, K> extends io.searchbox.action.AbstractAction.Builder<T, K> {
    private String url;
    private String methodName;
    private String queryParam; protected Builder() {
    } public K url(String url) {
    this.url = url;
    return (K)this;
    } public K methodName(String methodName) {
    this.methodName = methodName;
    return (K)this;
    } public K queryParam(String queryParam) {
    this.queryParam = queryParam;
    return (K)this;
    } }
    }

LocalResultAbstractAction

        public abstract class LocalResultAbstractAction extends AbstractLocalHttpAction<JestResult> {

        public LocalResultAbstractAction(Builder builder) {
super(builder);
} public JestResult createNewElasticSearchResult(String responseBody, int statusCode, String reasonPhrase, Gson gson) {
return (JestResult)this.createNewElasticSearchResult(new JestResult(gson), responseBody, statusCode, reasonPhrase, gson);
}
}

JestLocalHttpClient(用法build入口)

    public class JestLocalHttpClient extends LocalResultAbstractAction {

    private String query;

    protected JestLocalHttpClient(JestLocalHttpClient.Builder builder) {
super(builder);
this.setURI(this.buildURI()+""+getUrl());
this.query = getQueryParam();
} public String getRestMethodName() {
return getMethodName();
} public String getData(Gson gson) {
String data = this.query;
return data;
}
public static class Builder extends AbstractLocalHttpAction.Builder<JestLocalHttpClient, JestLocalHttpClient.Builder> { public Builder(String url, String methodName,String queryParam) {
this.url(url);
this.methodName(methodName);
this.queryParam(queryParam);
}
public JestLocalHttpClient build() {
return new JestLocalHttpClient(this);
}
} }

jestManager 封装如下

   public class JestManager {

    private static final Logger LOGGER = LoggerFactory.getLogger(JestManager.class);
/**
* 获取JestClient对象
* @return
*/
public static JestClient getJestClient(String clustName) {
JestClientFactory factory = new JestClientFactory();
Cluster cluster = CLUSTERMAP.get(clusterName);
try {
notes.add("http://"+cluster.getHost()+":"+cluster.getHttprt());
HttpClientConfig.Builder httpClientConfig = new HttpClientConfig
.Builder(notes)
.connTimeout(1500)
.readTimeout(3000)
.multiThreaded(true);
factory.setHttpClientConfig(httpClientConfig.build());
}catch (Exception e){
e.printStackTrace();
LOGGER.error("初始化jestclient实例失败:"+e.getMessage());
}
return factory.getObject();
}
}

上面自己的封装方法调用如下

    public JestResult httpProxy(String clustName, String url, String methodName, String queryParam) {
JestResult result = null ;
try {
JestLocalHttpClient jestLocalHttpClient = new JestLocalHttpClient.Builder(url,methodName,queryParam).build();
result = JestManager.getJestClient(clustName).execute(jestLocalHttpClient);
} catch (IOException e) {
e.printStackTrace();
LOGGER.error("jestLocalHttpClient失败:"+e.getStackTrace());
}
return result ;
}

测试如下

url:/demo/_search?pretty
method:get
queryParam:null 调用接口:返回信息
"{
"took" : 3,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
},
"hits" : {
"total" : 0,
"max_score" : null,
"hits" : [ ]
}
}
"

jest 用起来很方便,方法的封装让我们代码写起来更为简单。以上的内容希望能对大家有所帮助。

jest for elasticsearch的更多相关文章

  1. 【Es】jest操作elasticsearch

    https://blog.csdn.net/niuchenliang524/article/details/82869319 操作es的客房端有多个,在此例出三种(具体区别自行百度),本文讲的是jes ...

  2. jest操作 Elasticsearch

    package com.lgmall.search; import com.lgmall.search.esEntity.Article;import com.lgmall.search.esEnti ...

  3. springboot集成elk 四:springboot + Elasticsearch+Jest

    依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spri ...

  4. Spring Boot 整合 elasticsearch

    一.简介 我们的应用经常需要添加检索功能,开源的 ElasticSearch 是目前全文搜索引擎的 首选.他可以快速的存储.搜索和分析海量数据.Spring Boot通过整合Spring Data E ...

  5. SpringBoot笔记十六:ElasticSearch

    目录 ElasticSearch官方文档 ElasticSearch安装 ElasticSearch简介 ElasticSearch操作数据,RESTful风格 存储 检查是否存在 删除 查询 更新 ...

  6. ELK学习笔记之ElasticSearch简介

    0x00 什么是Elasticsearch Elasticsearch (ES)是一个基于 Lucene 的开源搜索引擎,它不但稳定.可靠.快速,而且也具有良好的水平扩展能力,是专门为分布式环境设计的 ...

  7. Elasticsearch Java API深入详解

    0.题记 之前Elasticsearch的应用比较多,但大多集中在关系型.非关系型数据库与Elasticsearch之间的同步.以上内容完成了Elasticsearch所需要的基础数据量的供给.但想要 ...

  8. 3.2_springBoot2.1.x检索之JestClient操作ElasticSearch

    这里介绍Jest方式交互, 导入jest版本 <!--导入jest--> <dependency> <groupId>io.searchbox</groupI ...

  9. spring boot application.properties 属性详解

    2019年3月21日17:09:59 英文原版: https://docs.spring.io/spring-boot/docs/current/reference/html/common-appli ...

随机推荐

  1. JQuery之事件冒泡

    JQuery 提供了两种方式来阻止事件冒泡. 方法一:event.stopPropagation(); $("#div1").mousedown(function(event){  ...

  2. 三种方法运行python

    注:本文基于windows 1.交互式解释器 配置好环境变量后,命令行中打开,输入python即可,Ctrl+Z退出 命令行选项 当从命令行启动Python时,可以给解释器一些选项,如下: -d   ...

  3. poj2524 解题报告

    基于并查集的一道简单题目 Ubiquitous Religions Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 22334 ...

  4. CentOS 7.2 配置mysql5.7

    准备篇:一.配置防火墙,开启80端口.3306端口CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙.1.关闭firewall:systemctl stop f ...

  5. Spark之导出PMML文件(Python)

    PMML,全称预言模型标记语言(Predictive Model Markup Language),利用XML描述和存储数据挖掘模型,是一个已经被W3C所接受的标准.PMML是一种基于XML的语言,用 ...

  6. Chrome浏览器读写系统剪切板

    IE浏览器支持直接读写剪切板内容: window.clipboardData.clearData(); window.clipboardData.setData('Text', 'abcd'); 但是 ...

  7. DOM操作整理

    DOM获取 1. 直接获取 document.getElementById("box_id") 通过ID获取 document.getElementsByName("my ...

  8. LDA数学八卦笔记(一)Gamma函数

    Technorati Tags: LDA主题模型

  9. SharePoint 2010 Url Shortener --SharePoint 2010 短URL生成器

    SharePoint 2010 Url Shortener --SharePoint 2010 短URL生成器 项目描写叙述 本项目加入了这种功能.在SP站点中能够生成短URLs. 这些URLs指向列 ...

  10. HDU 1711 Number Sequence(字符串匹配)

    Number Sequence Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...