博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bboss es对比直接使用es客户端的优势
阅读量:6412 次
发布时间:2019-06-23

本文共 2750 字,大约阅读时间需要 9 分钟。

bboss es和直接使用es客户端的优点到底在哪里呢?下面做个简单的阐述:

    es官方客户端有两种:restclient和transprortclient,前者是基于restful的,直接操作各种restful api和query dsl,比较简单,没有orm功能;后者是基于java api封装的orm框架,封装比较死板,不太灵活,兼容性差,不能像调用restful那样直接操作query dsl,所以也不能直接针对query dsl,在head插件或者kibana里面调试和调优query dsl,写出了query dsl还要想方设法转换成对应的java api的调用方式。

    相比较而然,bboss es融合了es官方提供的两种方式(restful和transprortclient)的功能,涵盖两方面能力,提供了(orm和restful,直接使用query dsl),是一个综合型的es客户端,主要优势如下:

  1. bboss es底层直接基于es 的http restful协议,因此支持所有的es的restful功能,采用连接池技术管理http连接,高效;
  2. 支持x-pack安全认证;
  3. 支持集群负载和容灾以及节点自动发现;
  4. 提供了丰富的orm api(增删改查、批量增删改,聚合统计等),api简洁易用;
  5. 基于xml配置文件管理query dsl脚本,在query dsl的基础上,提供了简单强大的动态控制语法结构,支持if/else,if/elseif/else,foreach循环控制结构,语法风格非常类似于mybatis管理sql语句的语法风格,但是更加简洁高效;
  6. 将query dsl脚本从java代码剥离,提供query dsl热加载功能,实时修改实时生效,开发调试效率高,可以与es head和kibana的deptool配合使用;
  7. 开发和配置也非常简单,只需要引入bboss es的maven坐标或者gradle坐标,无需依赖es官方的jar包,几乎兼容es的各个版本(向前、向后兼容,前提是编写query dsl脚本要兼容);
  8. bboss es即提供高阶的orm api,也提供了低阶原生restful以及java transport的支持,可以方便地根据自己的实际需要选用。
  9.     原生的restful的使用,bboss es直接发http restful请求,可以指定http post,get,delete,put方法,返回json报文,有问题直接抛异常。相关示例在新闻《》中都有介绍,而且除了返回string类型的json报文,还可以指定ResponseHandler回调处理接口,自行封装成自己想要的对象结构,例如: 
    Map
    state = clientUtil.executeHttp("_cluster/state",ClientInterface.HTTP_GET, new MapResponseHandler());//返回map结构
     

    10.对于响应的异常处理,如果restful返回异常报文,都会以ElasticsearchException抛出到应用端。

show me the code:

 

//一个完整的批量添加和修改索引文档的案例  SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd");		String date = format.format(new Date());		ClientInterface clientUtil = ElasticSearchHelper.getRestClientUtil();		List
demos = new ArrayList<>(); Demo demo = new Demo(); demo.setDemoId(2l); demo.setAgentStarttime(new Date()); demo.setApplicationName("blackcatdemo2"); demo.setContentbody("this is content body2"); demos.add(demo); demo = new Demo(); demo.setDemoId(3l); demo.setAgentStarttime(new Date()); demo.setApplicationName("blackcatdemo3"); demo.setContentbody("this is content body3"); demos.add(demo); //批量创建文档 String response = clientUtil.addDateDocuments("demo",//索引表 "demo",//索引类型 demos); System.out.println("addDateDocument-------------------------"); System.out.println(response); //批量更新文档 demo.setContentbody("updated"); response = clientUtil.updateDocuments("demo-"+date,"demo",demos); System.out.println("updateDateDocument-------------------------"); System.out.println(response); //获取索引文档,json格式 response = clientUtil.getDocument("demo-"+date,//索引表 "demo",//索引类型 "2");//文档id System.out.println("getDocument-------------------------"); System.out.println(response); //获取索引文档,返回Demo对象类型 demo = clientUtil.getDocument("demo-"+date,//索引表 "demo",//索引类型 "3",//文档id Demo.class);
    基于bboss es开发的统计查询效果图:

 

   
 
 
 
 
 
   

转载地址:http://zikra.baihongyu.com/

你可能感兴趣的文章
八大监听器
查看>>
self.navigationController退出到指定页面,或者一次性pop出n个页面
查看>>
iptables 端口转发以及双向通信
查看>>
备战一线互联网公司Java工程师面试题 (1)
查看>>
jquery图片切换插件jquery.cycle.js参数详解
查看>>
JavaScript push() 方法
查看>>
Map集合
查看>>
JSP基础语法1
查看>>
elasticsearch Java API 之GET API & DELETE API
查看>>
《深入理解Java虚拟机》——GC基础概念
查看>>
微信小程序联盟:官方文档+精品教程+demo集合(5月31日更新,持续更新中……)...
查看>>
Fastjson 的 Set类型和 WriteClassName 选项引起的BUG
查看>>
翻译: 星球生成 II
查看>>
IOS 多线程
查看>>
python序列化数据本地存放
查看>>
#CCNA#IP地址、子网划分参考资料网址
查看>>
比较不错的图片上传插件
查看>>
判偶不判奇
查看>>
Sequelize 数据库的支持
查看>>
BigDecimal类的加减乘除
查看>>