Elasticsearch7.3在java中的简单连接
发布日期:2021-06-29 13:43:40
浏览次数:2
分类:技术文章
本文共 4171 字,大约阅读时间需要 13 分钟。
上周我们新项目的开发使用的检索引擎确定为Elasticsearch7.3.1,伴随着好奇心我赶快查查这个版本ES的入坑率。
开心,ES7.3.1版本的发布周期还不到10天,设计人员简直是神仙!
心中一顿happy乱喷后,赶快上网搜索了一番ES7.3的java开发说明。由于之前用过ES1和ES5版本,知道小版本之间的API应该是通用的,会不会大版本间也能通用呢?
很显然,如果通用我就不写这篇入坑指南了。
之前我们用的一直是Spring追踪更新的transport包(如下图)
但很可惜,当前最新的Spring-elastiscsearch只更新到ES6.7,ES7不能使。唉,赶快找其他的小厂家插件。。后来找到了款ES7官网API推荐的包elasticsearch-rest-high-level-client,废话不多说,进入快速入门模式——>
1.引入高版本jar
如下图,ES7.x都有相应包,修改版本号即可
org.elasticsearch elasticsearch 7.3.1 org.elasticsearch.client elasticsearch-rest-high-level-client 7.3.1
2.编写demo代码
这里由于不是Spring的包,不需要加什么xml配置文件了,直接使用即可,啥都不说了,都在代码里了!仔细阅读下方的注释,我就不在这里多BB了(划重点)
/** * 查询phoneList * @param * @return */ @RequestMapping(value = "/selPhoneList", produces = "text/html;charset=UTF-8") @ResponseBody public JSONObject selPhoneList(String jmpt_name, String mobileLocation, String pageSize, String currentPage) { // 引入client,配置按各自修改 RestHighLevelClient client = new RestHighLevelClient( RestClient.builder( new HttpHost("127.0.0.1", "9200", "http"))); JSONObject resJSON = new JSONObject(); JSONArray jsonArr = new JSONArray(); int currentPageInt = 0; int pageSizeInt = 10; // 提取分页参数 if (jmpt_name == null || "undefined".equals(jmpt_name)) { jmpt_name = ""; } if (mobileLocation == null || "undefined".equals(mobileLocation)) { mobileLocation = ""; } if (pageSize != null && !"".equals(pageSize)) { pageSizeInt = Integer.parseInt(pageSize); } if (currentPage != null && !"".equals(currentPage)) { currentPageInt = Integer.parseInt(currentPage) * pageSizeInt; } // 查询流程***(重要):子查询对象(QueryBuilder)-->父查询对象(BoolQueryBuilder)-->查询函数构造对象(SearchSourceBuilder)-->请求发起对象(SearchRequest )-->发起请求-->返回结果(SearchResponse) // 创建父查询对象 BoolQueryBuilder srBuilder = QueryBuilders.boolQuery(); // 创建子查询对象 QueryBuilder jmpt_nameBuilder = null; QueryBuilder locationBuilder = null; // 创建查询函数构造对象 SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); System.out.println("打印提交的DSL语句:sourceBuilder--:" + sourceBuilder); // 参数注入到 if (!"".equals(jmpt_name)){ jmpt_nameBuilder = QueryBuilders.queryStringQuery(jmpt_name).field("jmpt_name");// 根据字段平台名称(jmpt_name)进行查询 srBuilder.must(jmpt_nameBuilder);//子查询对象放入父查询对象中 } if (!"".equals(mobileLocation)){ locationBuilder = QueryBuilders.queryStringQuery(mobileLocation).field("provience");// 根据字段省份(field:provience)进行查询 srBuilder.must(locationBuilder);//子查询对象放入父查询对象中 } sourceBuilder.query(srBuilder); // 把父查询对象放入函数构造对象中 sourceBuilder.from(currentPageInt); // 参数范围起 sourceBuilder.size(pageSizeInt); // 参数范围始 sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));// 设置超时时间 sourceBuilder.trackTotalHits(true); // 取消默认最大查询数量上限(默认10000) // 构造 请求发起对象 SearchRequest searchRequest = new SearchRequest("phone");// 这里直接配置索引名即可 // searchRequest.indices("phone"); searchRequest.source(sourceBuilder);// 把查询函数构造对象注入查询请求中 SearchResponse searchResponse;// 创建响应对象 SearchHits searchHits = null; try { searchResponse = this.client.search(searchRequest,RequestOptions.DEFAULT); searchHits = searchResponse.getHits();//获取响应中的列表数据 String total = searchHits.getTotalHits().value;//获取响应中的列表数据总数 for(SearchHit hit:searchHits.getHits()){// 遍历构造返回JSON,以下不再多说 JSONObject dataJSON = new JSONObject(); String tempRes = hit.getSourceAsString(); dataJSON = JSONObject.parseObject(tempRes); jsonArr.add(dataJSON); } resJSON.put("resArr", jsonArr); resJSON.put("total", total); } catch (IOException e) { e.printStackTrace(); } return resJSON; }
好了,上面是最基本的一个查询方式demo,其他的查询需要不同的父查询函数,后面我会继续更新。
如果出现问题请在下方及时留言
转载地址:https://chensj.blog.csdn.net/article/details/100184820 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2024年04月12日 13时45分41秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
弹性事务框架ETF4J——面向Java微服务的交易最终一致性解决方案
2019-04-29
实时音视频聊天中超低延迟架构的思考与技术实践
2019-04-29
首次公开!华为技术团队共同携手编写的《HarmonyOS系统学习笔记》V2.0版本
2019-04-29
Android Binder 原理
2019-04-29
java是最值得学习的编程语言吗?
2019-04-29
一、UML图
2019-04-29
王爽汇编语言第三版答案
2019-04-29
C++类对象的大小(1)
2019-04-29
静态成员函数和非静态成员函数的区别
2019-04-29
C++类默认函数
2019-04-29
成员函数初始化列表
2019-04-29
FALSE/TRUE与false/true的区别
2019-04-29
const在函数前后的意义
2019-04-29
八、桥接模式
2019-04-29
五、状态模式
2019-04-29
设计模式-前言
2019-04-29
二、设计模式的基本原则
2019-04-29
四、观察者模式
2019-04-29