jest for elasticsearch
*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的更多相关文章
- 【Es】jest操作elasticsearch
		https://blog.csdn.net/niuchenliang524/article/details/82869319 操作es的客房端有多个,在此例出三种(具体区别自行百度),本文讲的是jes ... 
- jest操作 Elasticsearch
		package com.lgmall.search; import com.lgmall.search.esEntity.Article;import com.lgmall.search.esEnti ... 
- springboot集成elk 四:springboot + Elasticsearch+Jest
		依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spri ... 
- Spring Boot 整合 elasticsearch
		一.简介 我们的应用经常需要添加检索功能,开源的 ElasticSearch 是目前全文搜索引擎的 首选.他可以快速的存储.搜索和分析海量数据.Spring Boot通过整合Spring Data E ... 
- SpringBoot笔记十六:ElasticSearch
		目录 ElasticSearch官方文档 ElasticSearch安装 ElasticSearch简介 ElasticSearch操作数据,RESTful风格 存储 检查是否存在 删除 查询 更新 ... 
- ELK学习笔记之ElasticSearch简介
		0x00 什么是Elasticsearch Elasticsearch (ES)是一个基于 Lucene 的开源搜索引擎,它不但稳定.可靠.快速,而且也具有良好的水平扩展能力,是专门为分布式环境设计的 ... 
- Elasticsearch Java API深入详解
		0.题记 之前Elasticsearch的应用比较多,但大多集中在关系型.非关系型数据库与Elasticsearch之间的同步.以上内容完成了Elasticsearch所需要的基础数据量的供给.但想要 ... 
- 3.2_springBoot2.1.x检索之JestClient操作ElasticSearch
		这里介绍Jest方式交互, 导入jest版本 <!--导入jest--> <dependency> <groupId>io.searchbox</groupI ... 
- spring boot application.properties 属性详解
		2019年3月21日17:09:59 英文原版: https://docs.spring.io/spring-boot/docs/current/reference/html/common-appli ... 
随机推荐
- CSS-笔记1-选择器与文本元素
			知识点一: CSS概念:CSS 指层叠样式表 (Cascading Style Sheets)(级联样式表) Css是用来美化html标签的,相当于页面化妆. 知识点二: 选择器格式与部分属性: 写法 ... 
- RFID电动自行车与共享单车之物联网比较
			目前比较热门的RFID电动自行车管理和共享单车,都是属于物联网范畴.它们之间有什么不同呢? 1.RFID电动自行车管理系统原理 RFID电动自行车管理,利用了有源RFID技术,使用基站SR8读取安装在 ... 
- ##6.2 Neutron计算节点-- openstack pike
			##6.2 Neutron计算节点 openstack pike 安装 目录汇总 http://www.cnblogs.com/elvi/p/7613861.html ##6.2 Neutron计算节 ... 
- ChatterBot之快速入门01
			本人运行环境为Python 3.5.2; 首先你需要导入chatterbot 的包,如果没有你先需要下载 使用命令 pip install chatterbot 1 # -*- coding: utf ... 
- MySql基础入门-mysql体系结构
			mysql体系结构: 由:连接池组件.管理服务和工具组件.sql接口组件.查询分析器组件.优化器组件. 缓冲组件.插件式存储引擎.物理文件组成. mysq ... 
- codeforces 897A  Scarborough Fair  暴力签到
			codeforces 897A Scarborough Fair 题目链接: http://codeforces.com/problemset/problem/897/A 思路: 暴力大法好 代码: ... 
- 玲珑学院-ACM比赛1014 - Absolute Defeat
			1014 - Absolute Defeat Time Limit:2s Memory Limit:64MByte Submissions:257Solved:73 DESCRIPTION Eric ... 
- php intval()和floatval()
			intval -- 获取变量的整数值 floatval -- 获取变量的浮点值 <?php $a = 26; $b = 4; $a/=$b; echo intval($a);//6 echo f ... 
- 五十个小技巧提高PHP执行效率(一)
			在项目开发过程中,经常遇到了一些PHP处理程序性能底下的情况,程序运行在centos+nginx环境,虽然这个有很多的原因如:服务器本身配置,运行环境nginx服务,php-fpm配置等等,更多有一点 ... 
- 两年JAVA程序员的面试总结
			前言 工作两年左右,实习一年左右,正式工作一年左右,其实挺尴尬的,高不成低不就.因此在面试许多公司,找到了目前最适合自己的公司之后.于是做一个关于面试的总结.希望能够给那些依旧在找工作的同学提供帮助. ... 
